Атрибут імені в @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) живий і здоровий.
David Siegal

Відповіді:


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запитів ..ie ..name об'єкта домену

@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.