Atributo de nombre en @Entity y @Table

82

Tengo una duda, porque el atributo de nombre está allí tanto en @Entity como en @Table

Por ejemplo, puedo tener el mismo valor para el atributo de nombre

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

y puedo tener diferentes nombres también para la misma clase

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

¿Alguien puede decirme cuál es la diferencia entre estos dos y por qué tenemos el mismo atributo en ambos?

Timotej Leginus
fuente
@Entity está obsoleto ahora.
Philip Rego
8
@PhilipRego: Mientras que \ @Entity de Hibernate (es decir, org.hibernate.annotations.Entity) está en desuso, \ @Entity de JPA (es decir, javax.persistence.Entity) está vivo y coleando.
David Siegal

Respuestas:

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

Entonces, en el primer caso, su tabla y entidad tendrán el mismo nombre, lo que le permitirá acceder a su tabla con el mismo nombre que la entidad mientras escribe HQL o JPQL.

Y en el segundo caso, al escribir consultas, debe usar el nombre dado en @Entity y el nombre dado en @Table se usará para nombrar la tabla en la base de datos.

Entonces, en HQL, su algo se referirá a otro en la base de datos.

ankit
fuente
18

@Entity(name = "someThing")=> este nombre se utilizará para identificar el dominio .. este nombre solo se identificará mediante hqlconsultas .. es decir .. nombre del objeto de dominio

@Table(name = "someThing") => este nombre se utilizará a qué tabla se refiere el objeto de dominio .. es decir .. nombre de la tabla

Manbumihu Manavan
fuente
15

@Entity es útil con clases modelo para indicar que esta es la entidad o tabla

@Table se utiliza para proporcionar un nombre específico a su tabla si desea proporcionar un nombre diferente

Nota: si no lo usa @Table, hibernar considere que @Entityes el nombre de su tabla por defecto y @Entitydebe

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

}
Bhuwan Tripathi
fuente
2

El atributo de nombre de @ Table es el nombre real de la tabla. El nombre de @Entity es útil si tiene dos clases de @Entity con el mismo nombre y necesita una forma de diferenciarlas al ejecutar consultas.

Coral
fuente
1
¿Cuándo tienes dos entidades con el mismo nombre? ¿Es cuando los nombres de las clases son iguales, pero las clases están en paquetes diferentes (los nombres calificados son diferentes)?
croraf