当前位置: 首页 > 面试题库 >

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

葛成双
2023-03-14
问题内容

我正在使用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]

问题答案:

@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


 类似资料:
  • 问题内容: 之间有什么区别? 和 在SQL Server 2008中? 问题答案: 临时表在大多数特性上都与普通表相似,只是它们进入TempDB而不是当前数据库,并且在有限范围后消失(取决于它们是基于会话的表还是全局的Temp表。记录到事务日志中,以及所有涉及性能的信息。otoh,您还可以像在普通表中一样向临时表中添加尽可能多的索引或视图,触发器或其他任何您想要的内容。 表变量是一种快捷的内存表(

  • 问题内容: 请帮助我了解在哪里使用常规JOIN和JOIN FETCH。 例如,如果我们有这两个查询 和 它们之间有什么区别吗?如果是,何时使用哪个? 问题答案: 在这两个查询中,你正在使用JOIN查询与至少一个部门关联的所有员工。 但是,不同之处在于:在第一个查询中,你仅返回hibernate的Employes。在第二个查询中,你将返回员工和所有关联的部门。 因此,如果你使用第二个查询,则无需执行

  • Java的和有什么区别?

  • 问题内容: 之间有什么区别? 和 问题答案: 可以在关系的两边使用。 现在的问题是关于使用上侧(极少数情况下)。这里的重点是 物理信息重复 (列名)以及 未优化的SQL查询,这会产生一些其他语句。 根据文件: 由于 多对一的 (几乎)总是 所有者侧 的在JPA规范的双向关系中,一对多关联是通过注解 通过troop属性具有双向的一对多关系。您不必(不必)在侧面定义任何物理映射。 要 以一对多方为拥有

  • 问题内容: 之间有什么区别 和 此示例来自Java EE教程,但我仍然不了解详细信息。 问题答案: 从这里: 级联删除 用CascadeType.REMOVE(或CascadeType.ALL,包括REMOVE)标记引用字段表示删除操作应自动级联到该字段引用的实体对象(多个实体对象可以被collection字段引用): 移除孤儿 JPA 2支持附加的,更积极的删除级联模式,可以使用@OneToOn

  • 问题内容: 我对Spring Data-JPA和JPA之间的区别感到困惑。我了解JPA,它是使用流行的ORM技术将Java对象持久化到关系数据库的规范。 换句话说,JPA提供接口和其他ORM技术,实现那些称为JPA提供程序的接口,例如Hibernate。 现在,Spring Data JPA到底是什么? Spring Data JPA是否在JPA之上添加了更多功能(接口),并且仍然仅被指定还是JP