我有一个方法,标记为@Transactional。 它由几个函数组成,其中一个使用JDBC,第二个使用JDBC - Hibernate,第三个使用JDBC。 问题在于,由Hibernate函数所做的更改在最后一个可用于JDBC的函数中不可见。Hibernate和JDBC在一个事务中
@Transactional
void update() {
jdbcUpdate1();
hibernateupdate1();
jdbcUpdate2(); // results of hibernateupdate1() are not visible here
}
所有功能都被配置成使用相同的数据源:
<bean id="myDataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
<property name="targetDataSource" ref="targetDataSource"/>
</bean>
<bean id="targetDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" lazy-init="true" scope="singleton">
<!-- settings here -->
</bean>
myDataSource bean是在代码中使用。 myDataSource.getConnection()用于在jdbc函数中使用连接,并且
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
...
}
});
用于休眠功能。 谢谢。
对于那些来自Google的人来说,我的解决方案就是针对这个问题。我在hibernate flush函数的最后添加了session.flush()。之后,它的写入结果在下一个jdbc读取函数中可用(在同一个事务中)。 – alex543 2010-11-11 13:53:20