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?


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


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


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    
{

}

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.