Подтвердить что ты не робот

Какая разница между аргументом name в @Entity и @Table при использовании JPA?

Я использую JPA2, и оба @Entity и @Table имеют атрибут name, e. г:.

@Entity(name="Foo")
@Table (name="Bar")
class Baz

Что я должен использовать, какие из них являются необязательными?

В моем конкретном случае у меня есть класс User и класс Group, у которых есть дополнительные требования (насколько я понимаю), потому что они зарезервированы в SQL.

Как будет выглядеть рабочее решение и с каким именем я буду ссылаться на объект при написании запросов?

Обновление. Я добавил name="GROUPS" в оба аннотации в Group и сделал то же самое для User, но теперь я получаю эту ошибку:

Exception Description: The table [USERS] is not present in this descriptor.
Descriptor: RelationalDescriptor(example.Group --> [DatabaseTable(GROUPS)])

и

Internal Exception: java.sql.SQLException: Table not found in statement [SELECT ID, MAXIMUMROLE, MEMBERSHIPS_ID FROM USERS]
4b9b3361

Ответ 1

@Table является необязательным. @Entity необходимо для аннотации класса POJO как объекта, но атрибут name не является обязательным.

Если у вас есть класс

 @Entity
 class MyEntity {}

Будет создана таблица с именем " MyEntity", а имя Entity будет MyEntity. Ваш запрос JPQL будет выглядеть следующим образом:

 select * from MyEntity

В JPQL вы всегда используете имя Entity и по умолчанию это имя класса.

если у вас есть класс

 @Entity(name="MyEntityName")
 @Table(name="MyEntityTableName")
 class MyEntity {}

тогда создается таблица с именем MyEntityTableName и имя сущности MyEntityName.

Ваш запрос JPQL будет выглядеть следующим образом:

 select * from MyEntityName

Ответ 2

имя в @Entity для запросов JPA-QL, по умолчанию используется имя класса без пакета (или неквалифицированное имя класса в Java lingo), если вы его измените, вам нужно сделать убедитесь, что вы используете это имя при создании запросов.

имя в @Table - это имя таблицы, в которой сохраняется этот объект.

Ответ 3

@Entity полезен для классов моделей, чтобы обозначить, что это сущность или таблица

@Table используется для указания любого конкретного имени вашей таблицы, если вы хотите указать любое другое имя

Примечание: если вы не используете @Table, тогда hibernate считает, что @Entity является вашим именем таблицы по умолчанию

@Entity    
@Table(name = "emp")     
public class Employee implements java.io.Serializable { }