Tôi có một phương thức, được đánh dấu là @Transactional. Nó bao gồm một số chức năng, một trong số chúng sử dụng JDBC và hàm thứ hai - Hibernate, thứ ba - JDBC. Vấn đề là những thay đổi, được thực hiện bởi chức năng Hibernate không hiển thị trong các chức năng cuối cùng, hoạt động với JDBC.Hibernate và JDBC trong một giao dịch
@Transactional
void update() {
jdbcUpdate1();
hibernateupdate1();
jdbcUpdate2(); // results of hibernateupdate1() are not visible here
}
Tất cả các chức năng được cấu hình để sử dụng nguồn dữ liệu giống nhau:
<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>
đậu myDataSource được sử dụng trong các mã. myDataSource.getConnection() được sử dụng để làm việc với các kết nối trong các hàm jdbc và
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
...
}
});
được sử dụng trong chức năng ngủ đông. Cảm ơn.
Đối với những người, những người sẽ đến đây từ Google, giải pháp của tôi cho vấn đề này. Tôi đã thêm session.flush() vào cuối hàm flush hibernate. Sau đó, kết quả ghi của nó có sẵn trong hàm jdbc read tiếp theo (trong cùng một giao dịch). – alex543