当我在做Hibernate独立程序示例时,在我的脑海中使用@Entity注释创建了一点混乱。
这里我的问题是,我有一个来自javax.persistence包的@Entity的持久化类,然后它工作正常但是当我用Hibernate API替换@Entity注释时(即来自org.hibernate.annotations包)然后它给出了 org.hibernate.MappingException:未知实体:com.jetti.test.Employee
给予更多解释,非常感谢。
当我在做Hibernate独立程序示例时,在我的脑海中使用@Entity注释创建了一点混乱。
这里我的问题是,我有一个来自javax.persistence包的@Entity的持久化类,然后它工作正常但是当我用Hibernate API替换@Entity注释时(即来自org.hibernate.annotations包)然后它给出了 org.hibernate.MappingException:未知实体:com.jetti.test.Employee
给予更多解释,非常感谢。
@ javax.persistence.Entity仍然是强制性的,@ org.hibernate.annotations.Entity不是替代品。
所以,hibernate的 @Entity
只是补充 javax.persistence.Entity
,并提供一些更精细的调整选项。
Hibernate和JPA之间的区别是相同的,而JPA只是一个规范,意味着没有实现,而Hibernate是一个实现。
您可以使用JPA注释来注释您的类,但如果没有实现,则不会发生任何事情。
以抽象的方式,您可以将“JPA”视为指南。
当您使用带有JPA的Hibernate时,您实际上正在使用JPA实现的Hibernate。好处是你可以将Hibernate的JPA实现替换为JPA规范的另一个实现(Eclipse Link,DataNucleuse,..),否则如果直接使用Hibernate,你不能只切换到另一个ORM。
我希望它有所帮助。
JPA不是ORM实现,但只是实现对象关系映射(ORM)的指导原则,并且没有实现的底层代码。它不会为您的应用程序提供任何具体功能。其目的是提供一组规则和指南,JPA实现供应商可以遵循这些规则和指南以标准化方式创建ORM实现。
Hibernate是一个JPA提供者。当规范发生新变化时,hibernate将发布其更新的JPA规范实现。其他流行的JPA提供者是Eclipse Link(参考实现),OpenJPA等。 在此查看其他提供商
@javax.persistence.Entity
是实现JPA指南的提供程序的GuideLine
@org.hibernate.annotations.Entity
是Hibernate ORM的实现
你还可以 看到这个其他话题
该 org.hibernate.annotations.Entity 不推荐使用注释,并计划删除:
@deprecated查看预期替换的各个属性。至 在4.1中删除
每个属性都有一个专用注释(例如 的dynamicInsert, DynamicUpdate)所以你应该总是起诉 javax.persistence.Entity 替代。