Atrybut nazwy w @Entity i @Table

85

Mam wątpliwości, ponieważ atrybut name występuje zarówno w @Entity, jak i @Table

Na przykład mogę mieć taką samą wartość atrybutu nazwy

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

i mogę mieć różne nazwy dla tej samej klasy

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

Czy ktoś może mi powiedzieć, jaka jest różnica między tymi dwoma i dlaczego mamy ten sam atrybut w obu?

Timotej Leginus
źródło
@Entity jest teraz przestarzałe.
Philip Rego,
8
@PhilipRego: Podczas gdy \ @Entity (tj. Org.hibernate.annotations.Entity) Hibernate'a jest przestarzałe, JPA \ @Entity (tj. Javax.persistence.Entity) działa i ma się dobrze.
David Siegal

Odpowiedzi:

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

Tak więc w pierwszym przypadku twoja tabela i encja będą miały tę samą nazwę, która pozwoli ci uzyskać dostęp do twojej tabeli o tej samej nazwie co jednostka podczas pisania HQL lub JPQL.

A w drugim przypadku podczas pisania zapytań musisz użyć nazwy podanej w @Entity, a nazwa podana w @Table zostanie użyta do nazwania tabeli w DB.

Więc w HQL twoje coś będzie odnosić się do otherThing w bazie danych.

ankit
źródło
19

@Entity(name = "someThing") => ta nazwa będzie używana do identyfikacji domeny .. ta nazwa będzie identyfikowana tylko przez hql zapytania ..ie .. nazwa obiektu domeny

@Table(name = "someThing") => ta nazwa będzie używana do której tabeli odwołuje się obiekt domeny..ie .. nazwa tabeli

Manbumihu Manavan
źródło
16

@Entity jest przydatny w przypadku klas modelu, aby wskazać, że jest to jednostka lub tabela

@Table służy do nadania tabeli dowolnej konkretnej nazwy, jeśli chcesz podać inną nazwę

Uwaga: jeśli nie korzystasz z @Tablehibernacji, weź pod uwagę, że @Entityjest to nazwa twojej tabeli i @Entitymusi

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

}
Bhuwan Tripathi
źródło
2

@ Atrybut nazwy tabeli to rzeczywista nazwa tabeli. Nazwa @ Entitiy jest przydatna, jeśli masz dwie klasy @Entity o tej samej nazwie i potrzebujesz sposobu na ich rozróżnienie podczas wykonywania zapytań.

Koral
źródło
3
Kiedy masz dwie jednostki o tej samej nazwie? Czy dzieje się tak, gdy nazwy klas są równe, ale klasy znajdują się w różnych pakietach (nazwy kwalifikowane są różne)?
croraf