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