![](/img/trans.png)
[英]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.