我最近正在学习Hibernate,它让我很头疼,因为我在我的应用程序中一直使用DataSource.getConnection
,在Hibernate中学习Session
概念非常困难。我也无法从API / Doc中找到足够的信息或确认信息。
我已阅读this。我理解我是否有一个容器管理事务(我使用HibernateTransactionManager
并且主要使用Spring的Transactional
注释),大多数时候,我应该使用getCurrentConnection
(内部事务),如它将返回绑定到事务上下文的唯一连接。
但是有时我必须使用其他人的方法/代码/库/框架可能在里面使用openConnection
(我无法更改他们的代码),我想知道,是什么这样做的后果?以这种方式获得的连接是否与getCurrentConnection
相同(因为它在事务内部被调用)?还是有所不同?如果它不同,它是否会绑定到事务并由事务管理?虽然我说“由...管理”是指,事务上下文将其设置为auto-commit false
,而在Transaction.commit
时,事务将有助于提交更改(也可能用于回滚)?
它延伸了我的想法,如果我在交易之外调用getCurrentConnection
怎么办?没有事务上下文,那么返回的连接是什么?连接绑定到哪里?基于这个doc,我可以看到这样做是有效的,但它没有解释结果是什么。
答案 0 :(得分:0)
但有时我必须使用其他人 可能在里面使用的方法/代码/库/框架
openConnection
(我无法更改他们的代码),我想 知道,这样做的后果是什么?
好的我已经测试了上面的代码,它会创建一个新的hibernate会话,这意味着,我必须手动处理会话,包括关闭它并刷新它。
它扩展了我的想法,如果我在外面调用getCurrentConnection怎么办? 交易?
这将完全不起作用,它将抛出异常,因为它无法在事务块之外找到任何活动事务。