我最近在学习Hibernate,这让我很头疼,因为我一直DataSource.getConnection
在应用程序Session
中使用Hibernate,所以在Hibernate中学习概念非常困难。我也确实无法从API / Doc中找到足够的信息或已确认的信息。
我已经通读此。我知道如果我有一个容器管理的事务(我正在使用HibernateTransactionManager
并且主要使用Spring的Transactional
注释),大多数情况下,我应该使用getCurrentConnection
(内部事务),因为它将返回绑定到事务上下文的唯一连接。
但是有时我必须使用其他人可能在内部使用的方法/代码/库/框架openConnection
(我无法更改其代码),我想知道,这样做的结果是什么?以这种方式获得的连接是否将与相同的会话getCurrentConnection
(因为它被称为内部事务)?还是不同?如果不同,它将绑定到事务并由事务管理吗?当我说“由...管理”的意思时,事务上下文将它设置为auto-commit false
on和on Transaction.commit
,事务是否将有助于提交更改(也可能用于回滚)?
这扩大了我的想法,如果我getCurrentConnection
在交易之外打电话怎么办?没有事务上下文,那么返回的连接是什么?连接在哪里?基于此文档,我可以看到这样做是有效的,但是并没有解释后果。
但是有时我必须使用其他人可能在内部使用的方法/代码/库/框架
openConnection
(我无法更改其代码),我想知道,这样做的结果是什么?
好的,我已经测试了上面的代码,它将创建一个新的休眠会话,这意味着我必须手动处理该会话,包括关闭它并刷新它。
它扩展了我的思想,如果我在Transaction之外调用getCurrentConnection怎么办?
这将完全无效,将引发异常,因为它无法在事务块之外找到任何活动的事务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句