Я ' 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:)
Слово 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...
}
Возможно, потому что "Порядок" является ключевым словом в SQL. Когда я сталкиваюсь с этим, я обычно просто ставлю «Tbl» в конце имен своих сущностей/таблиц, чтобы избежать потенциального конфликта.