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