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

Java Hibernate中的@Entity和JPA有什么区别,java,hibernate,jpa,orm,hibernate-mapping,Java,Hibernate,Jpa,Orm,Hibernate Mapping,当我在编写Hibernate独立程序示例时,使用@Entity注释在我的脑海中产生了一点混乱 这里我的问题是,我有一个从javax.persistence包中得到@Entity的持久化类,它工作得很好,但是当我用Hibernate API(即从org.Hibernate.annotations包)替换@Entity注释时,它给出了org.Hibernate.MappingException:Unknown Entity:com.jetti.test.Employee 请多作解释,我们将不胜感激

当我在编写Hibernate独立程序示例时,使用@Entity注释在我的脑海中产生了一点混乱

这里我的问题是,我有一个从javax.persistence包中得到@Entity的持久化类,它工作得很好,但是当我用Hibernate API(即从org.Hibernate.annotations包)替换@Entity注释时,它给出了org.Hibernate.MappingException:Unknown Entity:com.jetti.test.Employee

请多作解释,我们将不胜感激

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


因此,hibernate的
@Entity
只是对
javax.persistence.Entity
的补充,并提供了更多的微调选项。

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

您可以使用JPA注释对类进行注释,但是如果没有实现,什么都不会发生

以抽象的方式,你可以考虑“JPA”作为指导方针。 当您将Hibernate与JPA一起使用时,实际上是在使用Hibernate by JPA实现。好处是,您可以将Hibernate的JPA实现替换为JPA规范的另一个实现(Eclipse链接、DataNucleuse等等),否则,如果您直接使用Hibernate,就不能直接切换到另一个ORM

我希望这是有帮助的


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

Hibernate是一个JPA提供者。当规范有新的更改时,hibernate将发布JPA规范的更新实现。其他流行的JPA提供者有EclipseLink(参考实现)、OpenJPA等

@javax.persistence.Entity
是实现JPA准则的提供者的准则

@org.hibernate.annotations.Entity
是hibernate ORM的一个实现

此外,您还可以

注释已弃用,并计划删除:

@已弃用请参见预期替换的各个属性。到 将在4.1中删除


每个属性都有一个专用的注释(例如),因此您应该始终使用替代注释。

这篇文章解释了两个注释之间的差异以及未找到映射的原因:Hibernate实体已被弃用,因此您不应该使用它FWIW;参见javadocs,而不仅仅是使用不清楚的答案,你能详细说明一下吗?@XstianI认为Hibernate在下面使用JPA?@hagubear JPA是一个规范,Hibernate(和其他几个框架一样)实现了该规范。引用
JPA本身只是一个规范,而不是一个产品;它不能单独执行持久性或其他任何操作。JPA只是一组接口,需要一个实现。
。在这个问题的上下文中,这意味着Hibernate实现了对
javax.persistence.Entity
的支持,但通过
org.Hibernate.annotations.Entity
添加了更多功能。