JPA EntityManager详解
生活随笔
收集整理的這篇文章主要介紹了
JPA EntityManager详解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JPA EntityManager詳解
1.?? 持久化上下文(Persistence Context)
? 一個(gè)持久化單元(Persistence Unit)就是關(guān)于一組Entity類的命名配置。持久化單元是一個(gè)靜態(tài)的概念。 ? 一個(gè)持久化上下文(Persistence Context)就是一個(gè)受管的Entity實(shí)例的集合。每一個(gè)持久化上下文都關(guān)聯(lián)一個(gè)持久化單元,持久化上下文不可能脫離持久化單元獨(dú)立存在。持久化上下文中的Entity實(shí)例就是相關(guān)聯(lián)的持久化單元中的若干Entity的實(shí)例。持久化上下文是一個(gè)動態(tài)的概念。 ? 一個(gè)Entity實(shí)例處于受管狀態(tài),其實(shí)質(zhì)是:該實(shí)例存在于某個(gè)持久化上下文中,并且可能被某個(gè)EntityManager處理,也因?yàn)檫@個(gè)原因,所以我們說一個(gè)EntityManager管理一個(gè)持久化上下文。 ? 盡管持久化上下文非常重要,但是開發(fā)者不直接與之打交道,持久化上下文在應(yīng)用程序中是透明的,我們需要通過EntityManager間接管理它。2.?? 容器管理的EntityManager(Container-Managed EntityManager)
? 通過將@PersistenceContext注解標(biāo)注在EntityManager類型的字段上,這樣得到的EntityManager就是容器管理的EntityManager。由于是容器管理的,所以我們不需要也不應(yīng)該顯式關(guān)閉注入的EntityManager實(shí)例。 ? 容器管理的EntityManager又細(xì)分為兩種類型:事務(wù)范圍(Transaction)的和擴(kuò)展的(Extended)。 ? 若@PersistenceContext未指定type屬性,或者指定為PersistenContextType.TRANSACTION,則表示該EntityManager是事務(wù)范圍的;若指定為PersistenContextType.EXTENDED的,則表示該EntityManager是擴(kuò)展的。 ? 事務(wù)范圍:事務(wù)范圍的EntityManager是無狀態(tài)的,可用在無狀態(tài)會話Bean和有狀態(tài)會話Bean中。 ü 事務(wù)范圍的EntityManager依賴于JTA事務(wù),每次調(diào)用EntityManager實(shí)例的相關(guān)方法時(shí),EntityManager會查看是否有某個(gè)持久化上下文與當(dāng)前事務(wù)關(guān)聯(lián),如果有,則使用該持久化上下文;如果沒有,則EntityManager將創(chuàng)建一個(gè)持久化上下文,并將該持久化上下文與當(dāng)前事務(wù)關(guān)聯(lián)。當(dāng)事務(wù)結(jié)束,則持久化上下文消失。 ? 擴(kuò)展的:擴(kuò)展的EntityManager只能用于有狀態(tài)會話Bean。 ü 擴(kuò)展的EntityManager在有狀態(tài)會話Bean實(shí)例創(chuàng)建的時(shí)候創(chuàng)建一個(gè)持久化上下文,并且直到該有狀態(tài)會話Bean銷毀,則相應(yīng)的持久化上下文才被移除。 ü 由于在擴(kuò)展的EntityManager中,每次方法調(diào)用都是使用的相同的持久化上下文,所以前一次方法調(diào)用時(shí)產(chǎn)生的受管實(shí)體在下一個(gè)方法訪問時(shí)仍然為受管實(shí)體。轉(zhuǎn)載于:https://blog.51cto.com/77857/158996
總結(jié)
以上是生活随笔為你收集整理的JPA EntityManager详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用虚拟硬盘(把内存当作硬盘)来提高数据
- 下一篇: 为什么要使用路由重分发?