2013-04-22 169 views
100

我對Spring Data-JPA和JPA之間的區別感到有點困惑。我知道JPA知道它是使用流行的ORM技術將Java對象持久化到關係數據庫的規範,即換句話說,JPA提供接口和其他ORM技術,實現那些稱爲JPA提供者的接口,例如Hibernate。Spring Data-JPA與JPA:有什麼區別?

現在到底什麼是Spring Data JPA。 Spring Data JPA是否已經通過JPA添加了一些更多功能(接口),並且仍然只是指定它,或者它也是JPA提供者?

我看到Spring Data JPA在存儲庫周圍工作(DAO層:如果我沒有錯的話)。所以我的意思是,如何使用'Spring Data JPA + Hibernate'或只使用'Hibernate'指導它是不同的?

回答

95

我看到了春天,JPA WOR k圍繞倉庫(DAO層:如果我沒有錯)。所以我的意思是它是如何使用'Spring JPA + Hibernate'或僅直接使用'Hibernate'?

至於你說,JPA規範休眠是說明書的特定實施方式(這些實施通常被稱爲提供商)。通過使用Hibernate,您可以將自己綁定到該提供程序,從而限制您在需要時切換到另一個選項的自由(例如,您想使用EclipseLink或ObjectDB,因爲Hibernate有一個可阻止開發過程的錯誤)。

引用Spring Data JPA文檔:

實現的應用的數據訪問層一直是相當長的一段繁瑣。必須編寫太多的樣板代碼。領域類是貧乏的,並沒有被設計成真正的面向對象或領域驅動的方式。

使用這兩種技術使得開發人員在豐富域模型的持久性方面變得更容易。儘管如此,實現知識庫的樣板代碼數量仍然相當高。因此,Spring Data存儲庫抽象化的目標是大大減少爲各種持久性存儲實現數據訪問層的工作量。

概括起來講,它是在JPA添加另一個抽象層的頂部,種限定基於標準的設計,以支持在Spring context 持久層。那些已定義的接口(Spring已知)提供了框架使用JPA處理結果的服務。您定義的方式春天的存儲庫可以掃描項目,並找到它:

<repositories base-package="com.acme.repositories" /> 

因此,讓您在一個容器的情況下或在其外部使用它。

現在到底什麼是Spring,JPA。是Spring,JPA已經通過JPA添加了一些更多的功能(接口),並且仍然只是指定的,或者它也是JPA提供者?

Spring Data JPA提供了一個定義來實現通過引用JPA規範,使用您定義的提供程序引擎支持的存儲庫。

+1

我可以調用存儲庫春天管理實體的集合?我不知道爲什麼,但使用存儲庫的Spring JPA支持看起來與EJB的EntityManager非常相似 - 是正確的思想還是它們的目的完全不同?提前致謝。穆斯塔法。 – Mustafa 2014-06-12 17:55:20

+1

@Mustafa大多數解決方案都有共同點。艱難的目標可能是相同的,由於涉及的接口,實現是不同的。 – Gamb 2014-06-25 17:36:42

20

Java持久性API,有時被稱爲JPA,是一個Java框架在使用Java平臺標準版(JavaSE的)和Java平臺企業版(JavaEE的)應用程序管理關係數據。

持續在這一背景下涵蓋以下三個方面:

  • API本身,在javax.persistence包中定義。

  • Java持久性查詢語言(JPQL)。

  • 對象關係元數據。

    enter image description here

春天數據JPA是傘春天數據項目,可以更容易地實現基於JPA庫的一部分。

特點:

  • 成熟的支持,以建立一個基於Spring和JPA
  • 支持QueryDSL謂詞庫,從而類型安全的JPA查詢的
  • 透明的審計域類
  • 分頁的支持,動態查詢執行,到定製數據訪問代碼
  • 驗證在自舉時間整合的@Query註釋查詢的能力
  • 支持基於XML的實體映射
  • JavaConfig通過引入@EnableJpaRepositories

    基於存儲庫配置 enter image description here
3

JPA是Java持久性API,它是用於對象關係映射的Java標準API。

JPA只是一個規範 - 您需要實現它才能使用它。 Hibernate是JPA最知名和最常用的實現之一,但也有其他的,比如EclipseLink JPA。

Spring Framework是一個大型框架,可幫助您輕鬆編寫企業級軟件。它包含對許多Java技術的支持,包括JPA。

Spring框架由一組項目組成,其中一個項目是Spring Data。

Spring Data的目標是使它更容易處理從傳統關係數據庫到NoSQL數據庫的各種數據庫。 Spring Data通過Spring Data JPA子項目支持JPA。

要編寫使用JPA的程序,至少需要一個JPA實現,比如Hibernate。

如果您在爲您的應用程序使用Spring Framework,那麼您很可能希望將Spring Data JPA與Hibernate一起使用。

這個環節應該是有助於理解這個概念更好:

https://spring.io/blog/2011/02/10/getting-started-with-spring-data-jpa/

+0

儘管此鏈接可能會回答問題,但最好在此處包含[答案的重要部分](https://meta.stackexchange.com/a/8259),並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 [答案只是一個鏈接可能會被刪除](https://stackoverflow.com/help/deleted-answers) – adiga 2017-12-01 08:02:30

+0

謝謝@adiga我更新了我的答案。 – AmanSinghal 2017-12-01 08:25:44