我有一个疑问,因为@Entity和@Table中都存在name属性
例如,允许名称属性具有相同的值
@Entity(name = "someThing")
@Table(name = "someThing")
我也可以在同一班上使用不同的名字
@Entity(name = "someThing")
@Table(name = "otherThing")
谁能告诉我这两者之间有什么区别,为什么我们两者都具有相同的属性?
我有一个疑问,因为@Entity和@Table中都存在name属性
例如,允许名称属性具有相同的值
@Entity(name = "someThing")
@Table(name = "someThing")
我也可以在同一班上使用不同的名字
@Entity(name = "someThing")
@Table(name = "otherThing")
谁能告诉我这两者之间有什么区别,为什么我们两者都具有相同的属性?
Answers:
@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。
@Entity(name = "someThing")
=>此名称将用于标识域..此名称只能由hql
查询..ie来标识域对象。
@Table(name = "someThing")
=>此名称将用于域对象引用的表。即表的名称
@Entity
对于模型类很有用,它表示这是实体或表
@Table
用于提供表的任何特定名称(如果要提供其他名称)
注意:如果不使用,@Table
则休眠时@Entity
默认认为这是您的表名,并且@Entity
必须
@Entity
@Table(name = "emp")
public class Employee implements java.io.Serializable
{
}
@Table的名称属性是实际的表名称。如果您有两个具有相同名称的@Entity类,并且在运行查询时需要一种区分它们的方法,则@Entitiy的名称很有用。