簡體   English   中英

JPA和Hibernate批注之間的關系

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM