当我在做Hibernate独立程序示例时,在我的脑海中使用@Entity注释创建了一点混乱。
我的问题是,我有一个来自javax.persistence包的@Entity的持久化类,然后它工作正常但是当我用Hibernate API替换@Entity注释时(即来自org.hibernate.annotations包)然后它给了 org.hibernate.MappingException:未知实体:com.jetti.test.Employee
给予更多解释,非常感谢。
答案 0 :(得分:5)
@ javax.persistence.Entity仍然是强制性的,@ org.hibernate.annotations.Entity不是替代品。
因此,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指南
@org.hibernate.annotations.Entity
是Hibernate ORM的实现
此外,你可以see this other topic
答案 2 :(得分:2)
不推荐使用org.hibernate.annotations.Entity注释,并计划删除:
@deprecated查看预期替换的各个属性。至 在4.1
中删除
每个属性都有专门的注释(例如DynamicInsert,DynamicUpdate),因此您应该始终起诉javax.persistence.Entity替代。