Hibernate在Transaction内使用openConnection,在Transaction外使用getCurrentSession

山姆YC

我最近在学习Hibernate,这让我很头疼,因为我一直DataSource.getConnection在应用程序Session中使用Hibernate,所以在Hibernate中学习概念非常困难。我也确实无法从API / Doc中找到足够的信息或已确认的信息。

我已经通读我知道如果我有一个容器管理的事务(我正在使用HibernateTransactionManager并且主要使用Spring的Transactional注释),大多数情况下,我应该使用getCurrentConnection(内部事务),因为它将返回绑定到事务上下文的唯一连接。

但是有时我必须使用其他人可能在内部使用的方法/代码/库/框架openConnection(我无法更改其代码),我想知道,这样做的结果是什么?以这种方式获得的连接是否将与相同的会话getCurrentConnection(因为它被称为内部事务)?还是不同?如果不同,它将绑定到事务并由事务管理吗?当我说“由...管理”的意思时,事务上下文将它设置为auto-commit falseon和on Transaction.commit,事务是否将有助于提交更改(也可能用于回滚)?

这扩大了我的想法,如果我getCurrentConnection在交易之外打电话怎么办?没有事务上下文,那么返回的连接是什么?连接在哪里?基于此文档,我可以看到这样做是有效的,但是并没有解释后果。

山姆YC

但是有时我必须使用其他人可能在内部使用的方法/代码/库/框架openConnection(我无法更改其代码),我想知道,这样做的结果是什么?

好的,我已经测试了上面的代码,它将创建一个新的休眠会话,这意味着我必须手动处理该会话,包括关闭它并刷新它。

它扩展了我的思想,如果我在Transaction之外调用getCurrentConnection怎么办?

这将完全无效,将引发异常,因为它无法在事务块之外找到任何活动的事务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章