1. 程式人生 > >spring data jpa hibernate jpa 三者之間的關係

spring data jpa hibernate jpa 三者之間的關係

JPA規範與ORM框架之間的關係是怎樣的呢?

JPA規範本質上就是一種ORM規範,注意不是ORM框架——因為JPA並未提供ORM實現,它只是制訂了一些規範,提供了一些程式設計的API介面,但具體實現則由服務廠商來提供實現,JBoss應用伺服器底層就以Hibernate作為JPA的實現。

既然JPA作為一種規範——也就說JPA規範中提供的只是一些介面,顯然介面不能直接拿來使用。雖然應用程式可以面向介面程式設計,但JPA底層一定需要某種JPA實現,否則JPA依然無法使用。
從筆者的視角來看,Sun之所以提出JPA規範,其目的是以官方的身份來統一各種ORM框架的規範,包括著名的Hibernate、TopLink等。不過JPA規範給開發者帶來了福音:開發者面向JPA規範的介面,但底層的JPA實現可以任意切換:覺得Hibernate好的,可以選擇Hibernate JPA實現;覺得TopLink好的,可以選擇TopLink JPA實現……這樣開發者可以避免為使用Hibernate學習一套ORM框架,為使用TopLink又要再學習一套ORM框架。
下圖是JPA和Hibernate、TopLink等ORM框架之間的關係:

 

 JPA規範與ORM框架之間的關係

JPA和Hibernate的關係就像JDBC和JDBC驅動的關係,JPA是規範,Hibernate除了作為ORM框架之外,它也是一種JPA實現。JPA怎麼取代Hibernate呢?JDBC可以驅動JDBC驅動嗎?

那麼Spring Data JPA與JPA規範的關係是怎樣的呢?

一下回復的原話的重要部分:

Implementing a data access layer of an application has been cumbersome for quite a while. Too much boilerplate code had to be written. Domain classes were anemic and haven't been designed in a real object oriented or domain driven manner.

Using both of these technologies makes developers life a lot easier regarding rich domain model's persistence. Nevertheless the amount of boilerplate code to implement repositories especially is still quite high. So the goal of the repository abstraction of Spring Data is to reduce the effort to implement data access layers for various persistence stores significantly.
實現應用程式的資料訪問層已經很麻煩了好一陣子。太多的樣板程式碼必須被寫入。Domain classes,並沒有被設計成面向一個真正的物件或領域驅動的方式。 使用spring data jpa能夠使豐富的Domain classes的永續性開發變得輕鬆很多,即使樣板程式碼來實現儲存庫量特別還是相當高的。所以Spring data jpa的目標是簡化關於各種持久儲存資料訪問層而努力。 備註:Domain classes 指的是POJO類,例如資料庫中有一張表:Student,那麼我們會在程式中定義與之對應的Student.java,而這個Student.java就是屬於Domain classes。 Long story short, then, Spring Data JPA provides a definition to implement repositories that is supported under the hood by referencing the JPA specification, using the provider you define. 長話短說,Spring Data JPA 是在JPA規範的基礎下提供了Repository層的實現,但是使用那一款ORM需要你自己去決定。 我的理解是:雖然ORM框架都實現了JPA規範,但是在不同ORM框架之間切換是需要編寫的程式碼有一些差異,而通過使用Spring Data Jpa能夠方便大家在不同的ORM框架中間進行切換而不要更改程式碼。並且Spring Data Jpa對Repository層封裝的很好,可以省去不少的麻煩。 spring data jpa、jpa以及ORM框架之間的關係