JPA和Hibernate注释之间的关系

And*_*ili 7 java spring hibernate jpa spring-mvc

我是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

TNX

安德里亚

SJu*_*n76 22

答案很复杂.

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

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

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

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

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

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

  • +1,虽然最后一部分是不正确的.即使您使用Hibernate及其专有API,您也必须使用JPA注释.Hibernate不会重新实现JPA注释. (5认同)
  • "你不需要改变你的程序" - 我想知道是否有人发现这是100%真实.:) +1答案. (4认同)

JB *_*zet 8

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

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