JPA和Hibernate注释之间的关系

我是Spring世界的新手,我正在研究如何集成Hibernate和Spring框架

我有一些关于Hibernate注释和JPA注释之间关系的数据。

我有类似下面的实体类:

package org.andrea.myexample.HibernateOnSpring.entity; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; /* Classe che rappresenta un oggetto da persistere sul database * */ @Entity @Table(name="person") public class Person { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int pid; private String firstname; private String lastname; public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } } 

我不理解的是Hibernate注释和JPA注释之间的关系是什么

注释@ Entity ,@ Table(name =“person”) ,@ GeneratedValue(strategy = GenerationType.AUTO)和前面示例中的id是简单的JPA注释或Hibernate的特定注释?

如果我使用JPA注释将数据持久化到数据库,那么Hibernate给了我什么?

TNX

安德里亚

答案很复杂。

正如其他人所指出的那样,JPA是一个Hibernate提供实现的规范。 您使用JPA注释/ API,并且通过在类路径中包含Hibernate jar,Hibernate将提供实际的逻辑。

此外,Hibernate提供了与JPA无关的API。 你也可以使用它; 主要区别是:

  • 如果你使用JPA API,你可以稍后用其他JPA实现(vg EclipseLink)替换Hibernate,你不需要更改程序

  • 如果直接使用Hibernate API,则没有实现替代方案。 优点可能是您可以使用Hibernate已定义但不属于JPA标准的function,这些function可能对您有用。

无论如何,你应该完全避免将JPA与Hibernate API混合使用。 作为初学者,我建议你坚持使用JPA。

要确保使用JPA,请仅包含java.persistence类/注释。 不要包含org.hibernate任何内容(或者,如果您只想使用Hibernate,请执行相反的操作)。

Hibernate是JPA规范的一个实现。 JPA只是一个规范,一组注释和接口。 您需要JPA的实现才能使用它,而Hibernate就是其中之一。 就像使用JDBC一样,您需要一个数据库驱动程序。

注释的包是javax.persistence ,因此它们是JPA注释。 Hibernate注释在org.hibernate.xxx包中。