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

问题描述

@Table是可选的。将POJO类注释为实体需要@Entity,但是name属性不是强制性的。

如果你有课

 @Entity
 class MyEntity {}

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

 select * from MyEntity

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

如果你有课

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

然后用名称的表 创建和实体名称为 。

您的JPQL查询为:

 select * from MyEntityName

解决方法

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

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

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

在我的特定情况下,我有一个类User和一个类Group,它们有其他要求(据我了解),因为它们是SQL中的保留字。

可行的解决方案将是什么样子?编写查询时我将使用哪个名称来引用实体?

更新:我在中添加name="GROUPS"了两个注释,Group并为做了相同的操作User,但是现在出现了此错误:

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]