@Entity中的 name 参数和使用 JPA 时的 @Table 有什么区别?

2022-08-31 15:34:12

我正在使用JPA2和两者,并且有一个属性,例如:@Entity@Tablename

@Entity(name="Foo")
@Table (name="Bar")
class Baz

我应该使用什么,哪些是可选的?

在我的特定情况下,我有一个类和一个类,它们有额外的要求(据我所知),因为它们是SQL中的保留字。UserGroup

工作解决方案的外观如何,在编写查询时,我将使用哪个名称引用实体?

更新:我添加了两个注释,并为 做了同样的事情,但现在我得到这个错误:name="GROUPS"GroupUser

Exception Description: The table [USERS] is not present in this descriptor.
Descriptor: RelationalDescriptor(example.Group --> [DatabaseTable(GROUPS)])

和此错误

Internal Exception: java.sql.SQLException: Table not found in statement [SELECT ID, MAXIMUMROLE, MEMBERSHIPS_ID FROM USERS]

答案 1

@Table是可选的。将 POJO 类作为实体进行批注需要@Entity,但 name 属性不是必需的。

如果你有一个班级

 @Entity
 class MyEntity {}

将创建一个名为“MyEntity”的表,并且实体名称将为 MyEntity。您的 JPQL 查询将是:

 select * from MyEntity

在 JPQL 中,您始终使用实体名称,默认情况下它是类名。

如果你有一个班级

 @Entity(name="MyEntityName")
 @Table(name="MyEntityTableName")
 class MyEntity {}

然后创建一个名为 MyEntityTableName 的表,并且实体名称为 MyEntityName

您的 JPQL 查询将是:

 select * from MyEntityName

答案 2

的名称用于 JPA-QL 查询,它默认为不带包的类名(或 Java 术语中的非限定类名),如果更改它,则必须确保在生成查询时使用此名称。@Entity

的名称是保存此实体的表名称。@Table


推荐