我是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)和< strong> id 在前面的例子中使用的是简单的JPA注释或Hibernate的特定注释?
如果我使用JPA注释将数据保存到数据库,那么Hibernate会给我什么?
TNX
安德烈
答案 0 :(得分:21)
答案是混合的。
正如其他人所指出的,JPA是一个Hibernate提供实现的规范。您使用JPA注释/ API,并且通过在类路径中包含Hibernate jar,Hibernate将提供实际的逻辑。
此外,Hibernate提供了与JPA无关的API。你也可以使用它;主要区别是:
如果您使用JPA API,您可能会在以后用其他JPA实现(例如EclipseLink)替换Hibernate,并且您不需要对程序进行任何更改
如果直接使用Hibernate API,则没有实现替代方案。优点可能是您可以使用Hibernate已定义但不属于JPA标准的功能,这些功能可能对您有用。
无论如何,你应该完全避免将JPA与Hibernate API混合使用。作为初学者,我建议你坚持使用JPA。
要确保您使用的是JPA,请仅包含java.persistence
中的类/注释。不要包含org.hibernate
中的任何内容(或者,如果您只想使用Hibernate,请执行相反的操作)。
答案 1 :(得分:8)
Hibernate是JPA规范的一个实现。 JPA只是一个规范,一组注释和接口。您需要JPA的实现来使用它,而Hibernate就是其中之一。就像使用JDBC一样,您需要一个数据库驱动程序。
注释的包是javax.persistence
,因此它们是JPA注释。 Hibernate注释位于包org.hibernate.xxx
。
答案 2 :(得分:0)
就像@ SJuan76所说,JPA(Java持久性API)是一种规范,而Hibernate是一种实现。我同意其他人;尽可能多地使用普通的JPA。 JPA规范不会经常更改,并且在执行时通常向后兼容。这意味着您的代码将受到保护,以免更改实现。例如,如果您的代码不依赖org.hibernate.*
而是依赖javax.persistence.*
的任何内容,则可以自由升级Hibernate依赖项。
顺便说一句。从Hibernate 5.3开始,JPA是2.2版。 Read more about JPA here