soc*_*soc 51 java database persistence annotations jpa
我使用JPA2两者@Entity
并@Table
有一个name
属性,例如:
@Entity(name="Foo")
@Table (name="Bar")
class Baz
Run Code Online (Sandbox Code Playgroud)
我应该使用哪些,哪些是可选的?
在我的具体情况下,我有一个类User
和一个类Group
,它有额外的要求(据我所知),因为它们是SQL中的保留字.
在编写查询时,工作解决方案将如何显示以及我将以哪个名称引用实体?
更新.我添加name="GROUPS"
了两个注释Group
并执行了相同的操作User
,但现在我收到此错误:
Exception Description: The table [USERS] is not present in this descriptor.
Descriptor: RelationalDescriptor(example.Group --> [DatabaseTable(GROUPS)])
Run Code Online (Sandbox Code Playgroud)
和
Internal Exception: java.sql.SQLException: Table not found in statement [SELECT ID, MAXIMUMROLE, MEMBERSHIPS_ID FROM USERS]
Run Code Online (Sandbox Code Playgroud)
Dha*_*ath 81
@Table是可选的.将POJO类注释为实体需要@Entity,但name属性不是必需的.
如果你有课
@Entity
class MyEntity {}
Run Code Online (Sandbox Code Playgroud)
将创建名为" MyEntity "的表,实体名称为MyEntity.您的JPQL查询将是:
select * from MyEntity
Run Code Online (Sandbox Code Playgroud)
在JPQL中,您始终使用实体名称,默认情况下它是类名.
如果你有课
@Entity(name="MyEntityName")
@Table(name="MyEntityTableName")
class MyEntity {}
Run Code Online (Sandbox Code Playgroud)
然后创建一个名为MyEntityTableName的表,实体名称为MyEntityName.
您的JPQL查询将是:
select * from MyEntityName
Run Code Online (Sandbox Code Playgroud)
Mau*_*res 26
该名称中@Entity
是JPA-QL查询,它默认为类名,而不包(或不合格的类名,在Java行话),如果你改变它,你必须确保你建立查询时使用此名称.
该名称在@Table
就是这种实体被保存表名.
小智 5
@Entity
对于模型类很有用,表示这是实体或表
@Table
如果您想提供任何不同的名称,则用于为您的表提供任何特定名称
注意:如果您不使用@Table
,则休眠@Entity
默认情况下会认为这是您的表名
@Entity
@Table(name = "emp")
public class Employee implements java.io.Serializable { }
Run Code Online (Sandbox Code Playgroud)