我使用的是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]
发布于 2011-08-31 19:16:32
@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
发布于 2011-08-31 15:20:26
@Entity
中的 name 是用于JPA-QL查询的,它缺省为不带包的类名(或者Java术语中的非限定类名),如果您更改了它,则必须确保在构建查询时使用此名称。
@Table
中的 name 是保存此实体的表名。
发布于 2016-10-15 05:12:16
@Entity
对于模型类很有用,它表示这是实体或表
如果要提供任何不同的名称,则可以使用@Table
为表提供任何特定的名称
注意:如果您不使用@Table
,那么hibernate会认为@Entity
是缺省的表名
@Entity
@Table(name = "emp")
public class Employee implements java.io.Serializable { }
https://stackoverflow.com/questions/7259273
复制相似问题