JPA和Hibernate标注的关系(Relation between JPA and Hibern

2019-07-20 10:02发布

我在春天的世界很新,我正在学习如何集成Hibernate和Spring框架

我对beetween Hibernate的注解和JPA注释的关系有些献疑。

Whene我有类似如下的实体类:

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 =“人”),@GeneratedValue( 策略= GenerationType.AUTO)ID使用先前的例子是简单的JPA注释或特定注释对Hibernate?

如果我使用JPA注释来将数据保存到数据库中,什么给我休眠?

TNX

安德里亚

Answer 1:

答案是混合。

正如其他人所指出的那样,JPA是一个规范的Hibernate提供了一个实现。 您可以使用JPA注解/ API,并通过包含在类路径休眠罐,Hibernate会提供实际的逻辑。

此外,Hibernate提供了一个API,是无关的JPA。 您可以使用为好; 其主要区别在于:

  • 如果您使用JPA API,你以后可能会被其他JPA实现(VG的EclipseLink)代替Hibernate和你将不再需要改变你的计划

  • 如果你直接使用Hibernate的API,你有没有实现的替代品。 好处可能是,你可以使用Hibernate的定义,但不属于JPA标准,这可能usefult你的一部分功能。

无论如何,你应该完全避免是混合JPA与Hibernate的API。 作为一个初学者,我会建议你坚持JPA。

为了确保你正在使用JPA,只包括从班/注释java.persistence 。 不包括来自任何org.hibernate (或者,如果你只想使用Hibernate,做的正好相反)。



Answer 2:

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

注释的包是javax.persistence ,所以他们JPA注解。 Hibernate的注解是在包org.hibernate.xxx



Answer 3:

如@ SJuan76是说,JPA(Java持久性API)是一种规范和Hibernate是一个实现。 我同意其他人; 坚持尽可能多的,你可以使用原生的JPA。 JPA规范并不经常改变,当它它通常是向后兼容的。 这意味着,您的代码将在实施变更的保护。 你是例如免费升级Hibernate依赖,如果你的代码不依赖于任何东西从org.hibernate.*而是javax.persistence.*

顺便说一句。 JPA是在2.2版本的Hibernate 5.3。 了解更多关于JPA这里



文章来源: Relation between JPA and Hibernate annotation