想象一下这段代码:
foo() {
Connection conn = ...;
}
foo()
已从具有注释的方法中调用@Transactional
。如何获取当前的 JDBC 连接?请注意,foo()
它在一个 bean 中(所以它可以有@Autowired
字段)但foo()
不能有参数(所以我不能从某个地方传递连接)。
[编辑]我正在使用需要数据源或连接的 jOOQ。我的问题:我不知道配置了哪个事务管理器。可以是任何东西;Java EE,基于 DataSource,通过 JNDI 获取数据源。我的代码不是应用程序,而是库。我需要吞下别人放在我盘子里的东西。同样,我不能请求 Hibernate 会话工厂,因为使用我的应用程序可能不使用 Hibernate。
但我知道其他代码,如 Spring Hibernate 集成,可以通过某种方式从事务管理器获取当前连接。我的意思是,Hibernate 不支持 Spring 的事务管理器,因此胶水代码必须使 Spring API 适应 Hibernate 的期望。我需要做同样的事情,但我不知道它是如何工作的。
[EDIT2]我知道有一个活动事务(即 Spring 在某处有一个 Connection 实例,或者至少有一个可以创建一个的事务管理器),但我的方法不是 @Transactional。我需要调用一个java.sql.Connection
作为参数的构造函数。我该怎么办?