首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用JPA时,@Entity和@Table中的name参数有什么不同?

使用JPA时,@Entity和@Table中的name参数有什么不同?
EN

Stack Overflow用户
提问于 2011-08-31 23:18:00
回答 3查看 27.3K关注 0票数 61

我使用的是JPA2,@Entity@Table都有一个name属性,例如:

代码语言:javascript
代码运行次数:0
运行
复制
@Entity(name="Foo")
@Table (name="Bar")
class Baz

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

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

一个有效的解决方案应该是什么样子的,在编写查询时,我应该用哪个名称来引用实体?

更新:我将name="GROUPS"添加到Group中的两个注释中,并对User执行了相同的操作,但现在我收到以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
Exception Description: The table [USERS] is not present in this descriptor.
Descriptor: RelationalDescriptor(example.Group --> [DatabaseTable(GROUPS)])

这个错误

代码语言:javascript
代码运行次数:0
运行
复制
Internal Exception: java.sql.SQLException: Table not found in statement [SELECT ID, MAXIMUMROLE, MEMBERSHIPS_ID FROM USERS]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-01 03:16:32

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

如果你有一个类

代码语言:javascript
代码运行次数:0
运行
复制
 @Entity
 class MyEntity {}

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

代码语言:javascript
代码运行次数:0
运行
复制
 select * from MyEntity

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

如果你有一个类

代码语言:javascript
代码运行次数:0
运行
复制
 @Entity(name="MyEntityName")
 @Table(name="MyEntityTableName")
 class MyEntity {}

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

您的JPQL查询将为:

代码语言:javascript
代码运行次数:0
运行
复制
 select * from MyEntityName
票数 89
EN

Stack Overflow用户

发布于 2011-08-31 23:20:26

@Entity中的 name 是用于JPA-QL查询的,它缺省为不带包的类名(或者Java术语中的非限定类名),如果您更改了它,则必须确保在构建查询时使用此名称。

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

票数 29
EN

Stack Overflow用户

发布于 2016-10-15 13:12:16

@Entity对于模型类很有用,它表示这是实体或表

如果要提供任何不同的名称,则可以使用@Table为表提供任何特定的名称

注意:如果您不使用@Table,那么hibernate会认为@Entity是缺省的表名

代码语言:javascript
代码运行次数:0
运行
复制
@Entity    
@Table(name = "emp")     
public class Employee implements java.io.Serializable { }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7259273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档