[英]Hibernate Session scope in JTA transactions vs Open-Session-In-View
[英]managed vs jta session scope in Hibernate
我正在閱讀“Java Persistence with Hibernate”一書並被困在第494頁。 我們通過將hibernate.current_session_context_class to managed;
設置hibernate.current_session_context_class to managed;
擴展會話hibernate.current_session_context_class to managed;
這是否意味着我現在不能在我的方法中使用' jta (or javax.jta.UserTransaction)
'?
當我查看第494頁的攔截器代碼時,這種假設變得越來越強烈。 在攔截器中,我們調用' session.beginTransaction
',這意味着我們正在使用Hibernate Transaction API來控制事務。
這是否意味着,我的實體不能使用UserTransaction.begin()/ commit()來控制事務?
我告訴這個是因為在本書的某處我甚至讀到當你使用UserTransaction來控制事務邊界時,你不應該使用Hibernate Transaction API嗎?
這里需要一些幫助。
首先,恕我直言,你提到的這本書很棒,但現在有點過時了。 但我可以肯定地猜測,你的問題是基於被稱為“Hibernate中的語境會話”的問題。 它基本上是關於您希望Hibernate管理事務范圍的上下文。 此上下文驅動sessionFactory.getCurrentSession()方法的機制。
hibernate.current_session_context_class有三種可能的配置:
也:
現在看看這兩個很棒的鏈接:
http://community.jboss.org/wiki/SessionsAndTransactions
http://community.jboss.org/wiki/OpenSessionInView
第一個用於更新清除信息,后者用於查看“托管”上下文的自定義實現。 這將清除很多事情。 無論如何:
我正在閱讀“Java Persistence with Hibernate”一書並被困在第494頁。 我們通過將hibernate.current_session_context_class設置為managed來擴展會話; 這是否意味着我現在不能在我的方法中使用'jta(或javax.jta.UserTransaction)'?
您可以 - 因為它是托管上下文,它將取決於您的自定義實現。
這是否意味着,我的實體不能使用UserTransaction.begin()/ commit()來控制事務?
他們可以 - 實際上這正是你在“jta”和“線程”背景下所做的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.