@Entity和@Table中的名称属性


82

我有一个疑问,因为@Entity和@Table中都存在name属性

例如,允许名称属性具有相同的值

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

我也可以在同一班上使用不同的名字

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

谁能告诉我这两者之间有什么区别,为什么我们两者都具有相同的属性?


@Entity现在已弃用。
菲利普·雷哥

8
@PhilipRego:不赞成使用Hibernate的\ @Entity(即org.hibernate.annotations.Entity),而JPA的\ @Entity(即javax.persistence.Entity)仍然有效。
David Siegal

Answers:


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

因此,在第一种情况下,表和实体将具有相同的名称,这将允许您在编写HQL或JPQL时以与实体相同的名称访问表。

在第二种情况下,编写查询时,您必须使用@Entity中提供的名称,而@Table中提供的名称将用于在数据库中命名该表。

因此,在HQL中,您的someThing将引用数据库中的otherThing


18

@Entity(name = "someThing")=>此名称将用于标识域..此名称只能由hql查询..ie来标识域对象。

@Table(name = "someThing") =>此名称将用于域对象引用的表。即表的名称


15

@Entity 对于模型类很有用,它表示这是实体或表

@Table 用于提供表的任何特定名称(如果要提供其他名称)

注意:如果不使用,@Table则休眠时@Entity默认认为这是您的表名,并且@Entity必须

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

}

2

@Table的名称属性是实际的表名称。如果您有两个具有相同名称的@Entity类,并且在运行查询时需要一种区分它们的方法,则@Entitiy的名称很有用。


1
您何时有两个同名实体?类名称相等但类位于不同的程序包中(限定名称不同)时是否会出现?
croraf '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.