gpt4 book ai didi

hibernate - Hibernate 中的托管 vs jta session 范围

转载 作者:行者123 更新时间:2023-12-03 12:06:27 24 4
gpt4 key购买 nike

我正在阅读“Java Persistence with Hibernate”一书,但被困在第 494 页。我们通过设置 hibernate.current_session_context_class to managed; 来扩展对话。这是否意味着我现在不能使用 ' jta (or javax.jta.UserTransaction) ' 在我的方法中?

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

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

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

这里需要一些帮助。

最佳答案

首先,恕我直言,你提到的那本书很棒,但现在有点过时了。但我可以有把握地猜测,您的问题是基于所谓的“hibernate 中的上下文 session ”。它基本上是关于您希望 Hibernate 管理事务范围的上下文。此上下文驱动 sessionFactory.getCurrentSession() 方法的机制。

hibernate.current_session_context_class 的三种可能的配置:

  • "jta"上下文 = 一个已经存在的 jta 事务
  • “线程”上下文 = 当前线程(想想 ThreadLocal)
  • “托管”上下文 = 自定义到您的域

  • 还:
  • hibernate 开箱即用支持“jta”和“thread”
  • “线程”上下文用于大多数独立的 hibernate 应用程序或基于 spring 等轻量级框架的应用程序
  • “jta”用于 Java EE 环境

  • 现在看看这两个很棒的链接:

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

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

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

    I was going through 'Java Persistence with Hibernate' book and got stuck at Page#494. We do extending a conversation by setting hibernate.current_session_context_class to managed; does that mean now I cannot use 'jta (or javax.jta.UserTransaction)' inside my methods?



    您可以 - 因为它是托管上下文,所以它取决于您的自定义实现。

    Does this mean, my Entities cannot use UserTransaction.begin()/commit() to control the transaction?



    他们可以——事实上,这正是你在“jta”和“thread”上下文中所做的。

    关于hibernate - Hibernate 中的托管 vs jta session 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940042/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com