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