Hibernate和JPA之间的@Entity有什么区别

时间:2014-10-28 10:37:40

标签: java hibernate jpa orm hibernate-mapping

当我在做Hibernate独立程序示例时,在我的脑海中使用@Entity注释创建了一点混乱。

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

给予更多解释,非常感谢。

3 个答案:

答案 0 :(得分:5)

  

@ javax.persistence.Entity仍然是强制性的,@ org.hibernate.annotations.Entity不是替代品。

Documentation

因此,hibernate的@Entity只是对javax.persistence.Entity的补充,并提供了一些更精细的调整选项。

答案 1 :(得分:4)

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

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

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

当您在JPA中使用Hibernate时,您实际上正在使用Hibernate by JPA实现。好处是你可以将Hibernate的JPA实现替换为JPA规范的另一个实现(Eclipse Link,DataNucleuse,..),否则如果直接使用Hibernate,你就不能只切换到另一个ORM。

我希望它有用。


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

Hibernate是一个JPA提供者。当规范发生新变化时,hibernate将发布其更新的JPA规范实现。其他流行的JPA提供程序是Eclipse Link(参考实现),OpenJPA等。See Other provider here

@javax.persistence.Entity是实施JPA指南

的提供商的GuideLine

@org.hibernate.annotations.Entity是Hibernate ORM的实现

此外,你可以see this other topic

答案 2 :(得分:2)

不推荐使用org.hibernate.annotations.Entity注释,并计划删除:

  

@deprecated查看预期替换的各个属性。至   在4.1

中删除

每个属性都有专门的注释(例如DynamicInsertDynamicUpdate),因此您应该始终起诉javax.persistence.Entity替代。