У меня есть метод, обозначенный как @Transactional. Он состоит из нескольких функций, один из которых использует 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 фасоль используется в коде. myDataSource.getConnection() используется для работы с соединениями в функциях и JDBC
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
...
}
});
используется в функции спящего режима. Спасибо.
Для тех, кто получит от Google, мое решение этой проблемы. Я добавил session.flush() в конце функции спящего режима. После этого результат записи доступен в следующей функции чтения jdbc (в той же транзакции). – alex543