JPA / Hibernate не может создать объект с именем Order

Я ' m с использованием Hibernate / JPA и имеет объект @Entity с именем Order, указывающий на базу данных MySQL с использованием динамической генерации таблиц Hibernate, то есть генерирует таблицы во время выполнения для сущностей. Когда Hibernate создает таблицы, он создает таблицы для всех моих сущностей, кроме сущности Order. Если я переименую объект Order во что-нибудь другое, например StoreOrder, таблица store_order не будет создана.

Кроме того, если я сделаю это, но затем аннотирую объект StoreOrder, чтобы указать, что таблица, которую он должен создать, называется 'order' с помощью @Table (name = "order"), таблица больше не создается.

I понимаете, что заказ - зарезервированное слово, но является ли это причиной того, что он не может создать таблицу? Это кажется странным, учитывая, что в документах Hibernate используется пример сущности с именем Order.

Это не так Это похоже на проблему MySQL, поскольку я могу вручную создать таблицу с именем order прямо в базе данных.

Вот соответствующее определение объекта сущности Order ...

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Order extends PersistentEntity {
... rest of POJO def...
}

... и соответствующий Persistence.xml




    

        org.hibernate.ejb.HibernatePersistence

        conf/jpa/persistence-query.xml

        
        ...other entities...
        ie.wtp.store.model.Order
        ie.wtp.store.model.OrderItem

        
        
            
            
            
            

            

            
            
            
            
            
            
            
            
        


    

Любые мысли относительно того, почему этот объект заказа не создается, но создается, если я переименовываю его в StoreOrder?

Ура,

J:)

10
задан Pascal Thivent 31 August 2010 в 18:12
поделиться

2 ответа

Слово ORDER является зарезервированным ключевым словом, его необходимо экранировать.

В JPA 1.0 нет стандартизированного способа, и специальное решение Hibernate заключается в использовании обратных кавычек:

@Entity
@Table(name="`Order`")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Order extends PersistentEntity {
... rest of POJO def...
}

JPA 2.0 стандартизировал это, и синтаксис выглядит следующим образом:

@Entity
@Table(name="\"Order\"")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Order extends PersistentEntity {
... rest of POJO def...
}

Ссылки

17
ответ дан 3 December 2019 в 20:39
поделиться

Возможно, потому что "Порядок" является ключевым словом в SQL. Когда я сталкиваюсь с этим, я обычно просто ставлю «Tbl» в конце имен своих сущностей/таблиц, чтобы избежать потенциального конфликта.

1
ответ дан 3 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: