Hibernate和JPA中的@Entity有什么区别

2022-09-04 03:31:44

当我做示例Hibernate独立程序时,在我的脑海中使用@Entity注释时,会产生一些混淆。

这里我的问题是,我有一个持久化的类,@Entity来自javax.persistence包,然后它工作正常,但是当我用Hibernate API(即来自org.hibernate.annotations包)替换@Entity注释时,它就会给出org.hibernate.MappingException:未知实体:com.jetti.test.Employee

给予更多的解释是高度赞赏的。


答案 1

@javax.persistence.Entity 仍然是必需的,@org.hibernate.annotations.Entity 不是替代者。

文档

因此,休眠只是补充了 ,并提供了一些更多的微调选项。@Entityjavax.persistence.Entity


答案 2

Hibernate和JPA之间的区别是一样的,相反,JPA只是一个规范,这意味着没有实现,而Hibernate是一个实现。

您可以使用 JPA 注释对类进行批注,但是如果没有实现,则不会发生任何事情。

以抽象的方式,您可以将“JPA”视为准则。

当您将Hibernate与JPA一起使用时,您实际上是在使用Hibernate by JPA实现。这样做的好处是,你可以把Hibernate的JPA实现换成JPA规范的另一个实现(Eclipse Link,DataNucleuse,..),否则如果你直接使用Hibernate,你就不能切换到另一个ORM。

我希望它有帮助。


JPA不是ORM实现,而只是实现对象关系映射(ORM)的指南,并且没有实现的基础代码。它不会为您的应用程序提供任何具体功能。其目的是提供一组规则和准则,JPA实现供应商可以遵循这些规则和准则,以标准化的方式创建ORM实现。

Hibernate 是一个 JPA 提供程序。当规范有新的更改时,休眠将发布其JPA规范的更新实现。其他流行的 JPA 提供程序包括 Eclipse Link(参考实现)、OpenJPA 等。

@javax.persistence.Entity是实施 JPA 指南的提供商的指南

@org.hibernate.annotations.Entity是休眠 ORM 的实现

此外,您可以看到这个其他主题


推荐