[英]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.