hibernate和jpa中都有持久化上下文的概念(persistence context),持久化上下文其實就是hibernate和jpa的一級快取,通過在持久化上下文中儲存持久化狀態實體的快照,既可以進行髒檢測,並且持久化上下文還可以當做持久化實體的快取。雖然hibernate作為jpa的超集,hibernate3.2之後實現了jpa,但是兩者對持久化上下文的管理有一定的同,下面比較如下:
1.hibernate是將persistence context繫結到session中,當session關閉的時候,persistence context也就關閉了。而對於session來說,hibernate又可以根據具體情況分別繫結到thread和jta事務。如果 hibernate採用jdbc事務的話,那麼採用threadlocal來實現thread繫結,如果採用jta事務的話,則可以將session繫結到jta事務上。
2.jpa裡持久化上下文分為兩種情況:
(2)如果採用容器管理的話,那麼持久化上下文又分為兩種:
1)事務範圍的持久化上下文。對於事務的持久化上下文來說,每次當stateless bean與ejb object繫結的時候,容器會注入entitymanger,這樣entitymanager和事務都是容器管理的。每次方法呼叫預設啟動事務,方法呼叫結束後,結束事務。當事務結束的時候,與當前entitymanager關聯的持久化上下文也就隨之關閉。此種情況下不需要手動關 entitymanager。因為容器會在事務提交或者回滾後,自動關閉entitymanager.
2)擴充套件的持久化上下文,擴充套件的持久化上下文是針對與statefull bean來說的,此時持久化上下文的生命週期和statefull bean的生命週期是一致的。每次方法呼叫結束後,entitymanager關閉了,但是持久化上下文沒有關閉,這樣以來當事務結束的時候持久化上下文中的物件仍然處於持久化狀態,所以在跨方法呼叫時候,就不需要merge操作了。
JPA和Hibernate的區別
hibernate,當今很流行的orm框架,是jpa的乙個實現,但是其功能是jpa的超集。hibernate annotation是hibernate支援annotation方式配置的基礎,它包括了標準的jpa annotation以及hibernate自身特殊功能的annotation。hiber...
JPA和Hibernate抓取策略的差異
hibernate和jpa 的抓取策略是有差異的 這一點在使用jpa註解時會有所體現。有時候我們需要新增一些hibernate獨有的註解才能實現比較好的抓取。下面簡單提幾點。所謂 抓取策略 總要涉及兩個問 何時抓取以及如果抓取。這兩點在hibernate提供的註解上體現的非常明顯。hibernate...
JPA實體關聯 hibernate實現
一對一關係對映分為單向一對一和多向一對一。在配置關係時必須確立控制方和被控制方。單向和雙向的區別為看主控方和被控方兩邊是否都配置了 onetoone,如果都有為雙向一對一,反之為單向。雙向一對一關聯有兩條規則 person屬於關係維護方 entity table name t one person ...