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

标签 java database jpa annotations persistence

我正在使用 JPA2,并且 @Entity@Table 都有一个 name 属性,例如。 g.:

@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]

最佳答案

@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

关于java - 使用 JPA 时,@Entity 和 @Table 中的 name 参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7259273/

相关文章:

没有与数据库紧密耦合并使用存储过程的 PHP 框架?

sql - 错误 PLS-00103 : Encountered the symbol "DECLARE"?

Java - 如何将数据从 mysql 数据库转换为 JSON 数组?

java - 如何将 double 转换为小数点后两位?

java - 将对象实例的所有值添加到列表中

java - 检查给定字符串是否具有相同匹配的括号

java - 检查哪个值包含属性 Java WebDriver

java - 部署时 persistence.xml 中的 Manege jta-data-source

Spring 3 EJB 3.1 JPA 2

java - hibernate native 查询错误 : Column not found