繁体   English   中英

JPA和Hibernate批注之间的关系

[英]Relation between JPA and Hibernate annotation

我在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,请执行相反的操作)。

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

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

就像@ SJuan76所说的那样,JPA(Java持久性API)是一种规范,而Hibernate是一种实现。 我同意其他人; 尽可能多地使用普通的JPA。 JPA规范不会经常更改,并且在执行时通常向后兼容。 这意味着您的代码将受到保护,以免更改实现。 例如,如果您的代码不依赖org.hibernate.*而是javax.persistence.*任何内容,则可以自由升级Hibernate依赖项。

顺便说一句。 从Hibernate 5.3开始,JPA是2.2版。 在此处阅读有关JPA的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM