1.0jpa 2.0_Java EE 7之前版本替代JPA 2.1非同步持久性上下文
生活随笔
收集整理的這篇文章主要介紹了
1.0jpa 2.0_Java EE 7之前版本替代JPA 2.1非同步持久性上下文
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.0jpa 2.0
Java EE 7中的非同步持久性上下文
JPA 2.1引入了非同步持久性上下文的概念,該概念允許對JPA實體管理器的刷新進行細粒度控制,即通過顯式調用EntityManager#joinTransaction 。 以前,這默認情況下是JTA事務的結束,例如在典型的Stateless EJB中,實體管理器會在方法結束時(默認情況下開始和結束事務)將其狀態刷新到DB。 您可以在此處和此處閱讀有關此內容的更多信息。
在Java EE 7之前的時代(EE 5和EE 6)也有可能
可以對Java EE 5和6進行調整,以實現與Java EE 7中非同步持久性上下文所獲得的結果相同的結果。
想象一下一個用例,其中按順序(使用流程之類的向導)編輯客戶詳細信息,例如屏幕1中的地址信息,屏幕2中的聯系信息等。您希望在客戶輸入是但不希望將整個狀態推送到數據庫,直到該過程完成,即用戶輸入了所有類別的信息
package com.abhirockzz.conversationalee;import com.abhirockzz.conversationalee.entity.Customer; import java.util.Date; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.ejb.Remove; import javax.ejb.Stateful; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContextType;@Stateful @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public class CustomerEditorFacade{@PersistenceContext(type = PersistenceContextType.EXTENDED)EntityManager em;@Inject //this won't work in Java EE 5Principal authenticatedUser;private Customer customer;@PostConstructpublic void init(){System.out.println("CustomerEditorFacade created at " + new Date().toString()); }@PreDestroypublic void destroy(){System.out.println("CustomerEditorFacade destroyed at " + new Date().toString()); }//step 1public void updateCity(String custID, String city){String custID = authenticatedUser.getName(); //assume we have an authenticated principal which is the same as the customer ID in the DatabaseCustomer customerFromDB = em.find(Customer.class, Integer.valueOf(custID)); //obtain a 'managed' entitycustomerFromDB.setCity(city); //no need to call em.persistcustomer = customerFromDB; //just switch references//Customer state will NOT be pushed to DB}//step 2public void updateEmail(String email){customer.setEmail(email); //not pushed to DB yet}@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)public void save(){//dummy method to trigger transaction and flush EM state to DB}@Removepublic void finish(){//optional method to provide a way to evict this bean once used//not required if this is session scoped}}代碼注釋是自我解釋(希望如此)
干杯!
翻譯自: https://www.javacodegeeks.com/2015/12/pre-java-ee-7-alternative-jpa-2-1-unsynchronized-persistence-context.html
1.0jpa 2.0
總結
以上是生活随笔為你收集整理的1.0jpa 2.0_Java EE 7之前版本替代JPA 2.1非同步持久性上下文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百家号电脑版官方网址(百家号电脑登录平台
- 下一篇: gps怎么连电脑(gps怎么连接电脑)