我正在使用Hibernate和Spring,相关的配置:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
<tx:annotation-driven />
<aop:aspectj-autoproxy />
答案 0 :(得分:4)
考虑一下......
有些代码希望从Connection
获取DataSource
。可能是为了启动事务并运行一些SQL查询
AbstractRoutingDataSource
执行determineCurrentLookupKey()
以便从一组可用的DataSource
中找到合适的DataSource
查找键用于获取当前 AbstractRoutingDataSource
。 AbstractRoutingDataSource
返回该数据源的JDBC连接。
从determineCurrentLookupKey()
返回连接,就像它是正常来源一样。
现在你问为什么determineCurrentLookupKey()
没有在交易中运行? First Spring必须转到第1点来获取启动事务所需的一些数据库连接。看下一点。看到问题?闻到无限的递归给我。
简单地说 - DataSource
无法在事务中运行,因为事务需要连接,并且该方法的目的是确定使用哪个{{1}}来获取连接。另见:Chicken or the egg。
同样,工程师也无法使用计算机来设计第一台计算机。