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是什么给我带来的呢?

特纳克斯

安德里亚


问题答案:

答案好坏参半。

正如其他人指出的那样,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,请执行相反的操作)。