1. 程式人生 > >JPA和Hibernate到底是什麼關係???

JPA和Hibernate到底是什麼關係???

(文章借用了其他幾篇部落格中的內容,因為是初學者,許多概念性的關係自己不能完全理解,就將大神的搬了過來,如有不當,可留言,本人自會妥善處理,謝謝)

在學習框架的過程中,發現學的東西很多,但是感覺他們之間的聯絡區別都不是很瞭解,知道JPA可以去實現持久化資料到資料庫當中,Hibernate也有這樣的功能,總以為他們之間是一種平級的關係,擁有同樣的作用,是一種可以相互替代的關係,就像你吃飯時,選擇吃米飯和吃麵條一樣,然而,在進行了一番搜尋之後,發現並不是那麼回事兒。

JPA本身是一種規範,它的本質是一種ORM規範(不是ORM框架,因為JPA並未提供ORM實現,只是制定了規範)因為JPA是一種規範,所以,只是提供了一些相關的介面,但是介面並不能直接使用,JPA底層需要某種JPA實現,JPA現在就是Hibernate功能的一個子集

Hibernate 從3.2開始,就開始相容JPA。Hibernate3.2獲得了Sun TCK的 JPA(Java  Persistence API) 相容認證。JPA和Hibernate之間的關係,可以簡單的理解為JPA是標準介面,Hibernate是實現,並不是對標關係,借用下圖可以看清楚他們之間的關係,Hibernate屬於遵循JPA規範的一種實現,但是JPA是Hibernate遵循的規範之一,Hibernate還有其他實現的規範,所以它們的關係更像是JPA是一種做麵條的規範,而Hibernate是一種遵循做麵條的規範的湯麵,他不僅遵循了做麵條的規範,同時也會遵循做湯和調料的其他規範,他們之間並不是吃麵條和吃米飯的關係

1.JPA

  JPA全稱: Java Persistence API,JPA通過JDK 5.0註解或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中。
  JPA的出現有兩個原因:
  其一,簡化現有Java EE和Java SE應用的物件持久化的開發工作;
  其二,Sun希望整合對ORM技術,實現持久化領域的統一。

 Sun之所以提出JPA規範,其目的是以官方身份來統一各種ORM框架的規範,包括著名的Hibernate、TopLink等

 不過JPA規範給開發者帶來了福音:開發者面向JPA規範的介面,但底層的JPA實現可以任意切換:覺得Hibernate好的,可以選擇Hibernate JPA實現;覺得TopLink好的,可以選擇TopLink JPA實現……這樣開發者可以避免為使用Hibernate學習一套ORM框架,為使用TopLink又要再學習一套ORM框架

  JPA提供的技術:
  (1)ORM對映元資料
  JPA支援XML和JDK 5.0註解兩種元資料的形式,元資料描述物件和表之間的對映關係,框架據此將實體物件持
  久化到資料庫表中;
  (2)JPA 的API
  用來操作實體物件,執行CRUD操作,框架在後臺替我們完成所有的事情,開發者從繁瑣的JDBC和SQL程式碼中解
  脫出來。
  (3)查詢語言
  通過面向物件而非面向資料庫的查詢語言查詢資料,避免程式的SQL語句緊密耦合

2. Hibernate

  JPA是需要Provider來實現其功能的,Hibernate就是JPA Provider中很強的一個。

  例如: 

  (1)實體物件的狀態,在Hibernate有自由、持久、遊離三種,JPA裡有new,managed,detached,removed,而這些狀態都是一一對應的。

  (2)flush方法,都是對應的,

  (3)Query query = manager.createQuery(sql),它在Hibernate裡寫法上是session,而在JPA中變成了  manager

3.  JPA和Hibernate之間的關係,可以簡單的理解為JPA是標準介面,Hibernate是實現。

  那麼Hibernate是如何實現與JPA 的這種關係的呢?

  Hibernate主要是通過三個元件來實現的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。

  (1)hibernate-annotation是Hibernate支援annotation方式配置的基礎,它包括了標準的JPA annotation以及  Hibernate自身特殊功能的annotation。

  (2)hibernate-core是Hibernate的核心實現,提供了Hibernate所有的核心功能。

  (3)hibernate-entitymanager實現了標準的JPA,可以把它看成hibernate-core和JPA之間的介面卡,它並不直接提供ORM的功能,而是對hibernate-core進行封裝,使得Hibernate符合JPA的規範。

  總的來說,JPA是規範,Hibernate是框架,JPA是持久化規範,而Hibernate實現了JPA。

題外的一些思考:如果拋開JPA直接使用Hibernate的註解來定義一個例項,很快發現了幾個問題:

  1. jpa中有Entity, Table,hibernate中也有,但是內容不同
  2. jpa中有Column,OneToMany等,Hibernate中沒有,也沒有替代品

          hibernate對jpa的支援,不是另提供了一套專用於jpa的註解。一些重要的註解如Column, OneToMany等,hibernate沒有提供,這說明jpa的註解已經是hibernate 的核心,hibernate只提供了一些補充,而不是兩套註解。要是這樣,hibernate對jpa的支援還真夠足量,我們要使用hibernate註解就必定要使用jpa。

兩個額外的問題:

第一個是問如果想用hibernate註解,是不是一定會用到jpa的。網友的回答:“是。如果hibernate認為jpa的註解夠用,就直接用。否則會弄一個自己的出來作為補充”

第二個是問,jpa和hibernate都提供了Entity,我們應該用哪個,還是說可以兩個一起用?網友回答說“Hibernate的Entity是繼承了jpa的,所以如果覺得jpa的不夠用,直接使用hibernate的即可”

相關推薦

JPAHibernate關係之淺談

首先我們來看一下百度百科關於JPA的解釋,JPA全稱Java Persistence API。JPA通過JDK 5.0註解或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中。JPA的總體思想和現有Hibernate、TopLink、JDO等ORM框架大

JPAHibernate到底是什麼關係???

(文章借用了其他幾篇部落格中的內容,因為是初學者,許多概念性的關係自己不能完全理解,就將大神的搬了過來,如有不當,可留言,本人自會妥善處理,謝謝) 在學習框架的過程中,發現學的東西很多,但是感覺他們之間的聯絡區別都不是很瞭解,知道JPA可以去實現持久化資料到資料庫當中,Hi

springboot2.0.3使用jpahibernate的方式配置多數據源(sqlitemysql)

自動 username urn ini sqli tps www 不同的 sqlite數據庫 application.properties配置: #數據庫配置 mysql.spring.datasource.jdbc-url =jdbc:mysql://127.0.0.1

JPA hibernate-jpa-api

package com.oa.file.form; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.

springboot jpahibernatemysql對應欄位如何處理

    背景:程式中的entity物件中欄位expression為json字串欄位,每次前端傳過來的json物件進行轉換會時出現錯誤,由於expression被轉換為了JsonObject型別導致。

轉:spring data jpahibernatejpa 三者之間的關係 spring data jpa hibernate jpa 三者之間的關係

原文連結:spring data jpa、 hibernate、 jpa 三者之間的關係 spring data jpa hibernate jpa 三者之間的關係 JPA規範與ORM框架之間的關係是怎樣的呢? JPA規範本質上就是一種ORM規範,注意不是ORM框架——因為

JPAHibernate、Spring Data、Spring Data JPA之間的關係

什麼是JPA? JPA(Java Persistence API)是Sun官方提出的Java持久化規範。它為Java開發人員提供了一種物件/關係對映工具來管理Java應用中的關係資料。 什麼是Hibernate? Hibernate是對JDBC進行了非常輕量級的物件封裝,它將PO

Hibernate關係維護方級聯的理解

級聯:在雙向多對一中,有一方設定了級聯,如@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)(它是在多的一方設定了級聯),它的作用就是在操作設定級聯的那一方時會影響另一方(比如在儲存時,當然前提是要對對

JPAHibernateMybatis區別總結

一、應用場合: 傳統公司、部分個人開發者喜歡用jpa;而網際網路公司更青睞於mybatis 原因: 1、mybatis更加靈活,開發迭代模式決定了他是網際網路公司的首先;每一次的修改不會帶來效能上的下降。 2、傳統公司需求迭代速度慢、專案改動小,hibernate可以

hibernate關聯關係中的一對一以及懶載入的原理:lazyfetch的理解

******************** Person.java主對像 ******************** package blog.hibernate.domain; public class Person { private int id; p

Springmaven整合mvc,jpa,mongodb,Hibernate

小弟前一段時間在玩弄著Spring,後來發現Spring的那些專案是個好東西啊,特別是Spring的Data那一塊,使用起來是那麼水到渠成,不管底層資料庫是結構化的還是非結構化的(MongoDB,neo4j),用起來沒什麼區別。 所以,自己手動從頭到尾搭建了一個Spring

JPAHibernate、Spring data jpa之間的關係,終於明白了

什麼麼是JPA? 全稱Java Persistence API,可以通過註解或者XML描述【物件-關係表】之間的對映關係,並將實體物件持久化到資料庫中。 為我們提供了: 1)ORM對映元資料:JPA支援XML和註解兩種元資料的形式,元資料描述物件和表之間的對映關係,

hibernate中的ThreadLocalSessionContextTransaction的關係

       最近在做一個鐵科院的醫保專案框架是SSH,這種經典框架相信很多人對這個都很熟悉,不過對有些概念性的東西不知道你是否清楚,例如我們都知道hibernate通過session來操作資料庫完成

Hibernate中使用JPA(註解)配置物件關係對映

java中註解也是一大特點,平時進行單元測試時我們用過@Test註解進行測試 JPA就是java專門針對持久層框架進行設計的一套規範 JPA:Java Persistence API,其實它也就是一堆介面,就想JDBC一樣,不同的框架只要遵循這同一套規範就可以在java環境

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

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

Spring Boot入門第二天:一個基於Spring Boot的Web應用,使用了Spring Data JPAFreemarker。

per pan let mysq 應用 posit ble host thead 今天打算從數據庫中取數據,並展示到視圖中。不多說,先上圖: 第一步:添加依賴。打開pom.xml文件,添加必要的依賴,完整代碼如下: <?xml version="1.0" enco

MyBatisHibernate的優缺點對比

hiberna 編寫 完全 都是 關聯 生成 模式 相對 臟數據 Hibernate的優點: 1、hibernate是全自動,hibernate完全可以通過對象關系模型實現對數據庫的操作,擁有完整的JavaBean對象與數據庫的映射結構來自動生成sql。 2、功能強大,數據

springhibernate 基礎的增刪改

seh 基礎 except str @override log string return .get 所有的dao層可以有個superDao 比如:BaseHibernateDao 繼承的類是hibernate4 public class BaseHibernateDao

整合Spring框架Hibernate框架

slf4j erl update rep java 監聽 session hiberna .cn -------------------siwuxie095 整合 Spring 框架和 Hibernate 框架

MyBatisHibernate相比,優勢在哪裏?

機制 庫類 用戶 log4 應該 好的 解決方案 hiberna 數據庫 1、開發對比開發速度 hibernate的真正掌握要比Mybatis來得難些。Mybatis框架相對簡單很容易上手,但也相對簡陋些。個人覺得要用好Mybatis還是首先要先理解好Hibernate。