在JPA中使用保留的JPQL关键字

dea*_*mon 7 java orm jpa jpql java-ee

我有一个名为"Group"的实体类,NetBeans警告我"实体表名是一个保留的Java Persistence QL关键字".

类似的情况是使用保留的SQL关键字.

这个名字会被转义吗?是否使用不同的表名解决了问题@Table(name ="otherName").或者我应该重命名课程?

Pas*_*ent 11

这个名字会被转义吗?

没有在JPA规范是这么说的,如果您的提供商做,这是特定的供应商.

是否使用不同的表名来解决问题@Table(name ="otherName")

显然,它会(只要你当然不使用另一个保留关键字).但是,如果您使用的是JPA 2.0提供程序,则有一种标准方法可以使用双引号来转义数据库对象名称:

@Table(name="\"Group\"")
Run Code Online (Sandbox Code Playgroud)

在JPA 1.0中,没有任何标准,它取决于您的JPA提供程序.例如,Hibernate使用反引号:

@Table(name="`Group`")
Run Code Online (Sandbox Code Playgroud)

或者我应该重命名课程?

不可以.实体的表名默认为实体名称,但您可以使用@Table我们看到的注释来控制它.因此无需更改实体的类名.

  • 如果您使用这样的引号,将无法创建任何组合表(fe OneToMany关系)("Group"_Members fe是无效名称).这个解决方案是一个黑客,我建议不要使用表的保留名称.字段名称不是问题. (2认同)