2010-01-28 37 views
7

我有一个名为“Group”的实体类,NetBeans警告我“实体表名是保留的Java Persistence QL关键字”。使用保留的JPQL关键字与JPA

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

这个名字会被转义吗?使用不同的表名将解决问题@Table(name =“otherName”)。或者我应该重新命名课程?

回答

11

这个名字会被转义吗?

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

会使用不同的表名称的解决问题@Table(name =“中文别名”)

显然,它会(只要你不使用,当然另一个保留关键字)。但是,如果你使用的是JPA 2.0提供商,有一个标准的方式来获得一个数据库对象名逃了出来,用双引号:

@Table(name="\"Group\"") 

在JPA 1.0,没有什么标准,这取决于您的JPA提供商。例如,Hibernate使用反引号:

@Table(name="`Group`") 

或者我应该命名类?

不。实体的表名称默认为实体名称,但您可以使用@Table注释对其进行控制,如我们所见。因此不需要更改实体的类名称。

+2

如果使用这种引号,任何组合表(f.e. OneToMany关系)将无法创建(“组”_Members f.e.是无效名称)。这个解决方案是一个黑客攻击,我建议不要使用表的保留名称。字段名称不太成问题。 – Steven 2013-12-27 08:33:15

4

您不必重命名类 - 而且您也不应该 - 您选择的名称以最佳方式反映了您的域,并且由于工具或框架限制,您不应该更改它,以防工具/ framework提供了避免“冲突”的方法。 JPA提供了这种方式。

+0

不,“@Entity(name”foo“)”的名称元素是别的,它用于定义要在JPQL查询中使用的名称。它已经注意到了数据库对象。 – 2010-09-05 21:24:45

+0

已更正。 (15chr) – Bozho 2010-09-05 21:59:30