首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate中的托管vs会话范围

Hibernate中的托管vs会话范围
EN

Stack Overflow用户
提问于 2011-05-09 16:57:01
回答 1查看 6.1K关注 0票数 4

我读了一本“”的书,被困在了Page#494上。我们通过设置hibernate.current_session_context_class to managed;来扩展会话,这是否意味着我现在不能在我的方法中使用'jta (or javax.jta.UserTransaction)‘?

当我查看Page#494的拦截器代码时,这个假设变得更加强大了。在拦截器中,我们调用'session.beginTransaction‘,这意味着我们使用Hibernate事务API来控制事务。

这是否意味着我的实体不能使用UserTransaction.begin()/commit()来控制事务?

我之所以这么说,是因为在这本书的某个地方,我甚至读到,当您使用UserTransaction控制事务边界时,您不应该使用Hibernate事务API?

这里需要帮助。

EN

回答 1

Stack Overflow用户

发布于 2011-10-28 18:08:16

首先,IMHO --你提到的书--很好,但现在有点过时了。但我可以有把握地猜测,你的问题是基于所谓的“Hibernate中的上下文会话”。它基本上是关于上下文的,您希望Hibernate在其中管理事务的范围。这个上下文驱动sessionFactory.getCurrentSession()方法的机制。

有三种可能对hibernate.current_session_context_class的信任:

transaction

  • "thread“上下文=一个已经存在的jta ThreadLocal)

  • "managed”上下文=当前线程(考虑ThreadLocal)

  • “managed”context =定制到您的域

)

另外:

  • "jta“和”“由hibernate开箱即用的
    • ”线程“上下文支持,在大多数独立的hibernate应用程序中使用,或者基于spring
    • 之类的轻量级框架的”jta“在Java
    • 中使用。

现在请查看以下两个伟大的链接:

http://community.jboss.org/wiki/SessionsAndTransactions

http://community.jboss.org/wiki/OpenSessionInView

第一个用于更新clear信息,后者用于查看“托管”上下文的自定义实现。这会澄清很多事情的。无论如何:

我正在读“”一书,却被困在了Page#494上。我们通过将hibernate.current_session_context_class设置为managed来扩展会话;这是否意味着我现在不能在我的方法中使用“jta(或javax.jta.UserTransaction)”?

您可以--因为它是托管上下文,它将依赖于您的自定义实现。

是否意味着,我的实体不能使用UserTransaction.begin()/commit()来控制事务?

它们可以--事实上,这正是您在"jta“和”线程“上下文中要做的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5940042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档