Атрибут имени в @Entity и @Table


85

Я сомневаюсь, потому что атрибут name присутствует как в @Entity, так и в @Table

Например, мне разрешено иметь такое же значение для атрибута name

@Entity(name = "someThing")
@Table(name = "someThing")

и у меня могут быть разные имена для одного и того же класса

 @Entity(name = "someThing")
 @Table(name = "otherThing")

Может ли кто-нибудь сказать мне, в чем разница между этими двумя и почему у нас одинаковый атрибут в обоих?


@Entity сейчас устарела.
Филип Рего

8
@PhilipRego: в то время как \ @Entity Hibernate (т.е. org.hibernate.annotations.Entity) устарел, \ @Entity JPA (т.е. javax.persistence.Entity) жив и здоров.
Дэвид Сигал,

Ответы:


106
@Entity(name = "someThing") => this name will be used to name the Entity
@Table(name = "someThing")  => this name will be used to name a table in DB

Итак, в первом случае ваша таблица и объект будут иметь одно и то же имя, что позволит вам получить доступ к вашей таблице с тем же именем, что и объект, при написании HQL или JPQL.

А во втором случае при написании запросов вы должны использовать имя, указанное в @Entity, а имя, указанное в @Table, будет использоваться для имени таблицы в БД.

Итак, в HQL ваш someThing будет ссылаться на otherThing в БД.


19

@Entity(name = "someThing")=> это имя будет использоваться для идентификации домена .. это имя будет определяться только hqlзапросами .. т.е. .. имя объекта домена

@Table(name = "someThing") => это имя будет использоваться к какой таблице ссылается объект домена .. т.е. имя таблицы


16

@Entity полезно с классами модели, чтобы обозначить, что это объект или таблица

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

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

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

}

2

Атрибут имени @ таблицы - это фактическое имя таблицы. Имя @ Entitiy полезно, если у вас есть два класса @Entity с одинаковым именем и вам нужен способ различать их при выполнении запросов.


3
Когда у вас есть два объекта с одинаковым именем? Это когда имена классов равны, но классы находятся в разных пакетах (уточненные имена разные)?
Croraf
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.