我有一個方法,標記爲@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