【发布时间】:2016-08-24 01:53:05
【问题描述】:
我最近在学习Hibernate,它让我很头疼,因为我在我的应用程序中一直使用DataSource.getConnection,在Hibernate中学习Session概念是相当困难的。我也无法从 API/Doc 中找到足够的信息或确认信息。
我已经阅读了this。我知道如果我有一个容器管理的事务(我使用 HibernateTransactionManager 并且主要使用 Spring 的 Transactional 注释),大多数时候,我应该使用 getCurrentConnection(内部事务),因为它将返回我唯一绑定到事务上下文的连接。
但有时我必须使用其他人的方法/代码/库/框架,可能内部将使用openConnection(我无法更改他们的代码),我想知道,结果是什么这样做?这样得到的连接会不会和getCurrentConnection是同一个会话(因为在事务内部调用)?还是不一样?如果不同,它是否也会绑定到事务并由事务管理?当我说“由管理”的意思时,事务上下文会将其设置为auto-commit false,在Transaction.commit 时,事务将有助于提交更改(也可能用于回滚)?
它扩展了我的想法,如果我在事务之外调用getCurrentConnection 会怎样?没有事务上下文,那么返回的连接是什么?以及连接绑定到哪里?基于这个doc,我可以看到这样做是有效的,但它没有解释后果是什么。
【问题讨论】:
标签: hibernate jakarta-ee transactions connection database-connection