Tengo un método, marcado como @Transactional. Consta de varias funciones, una de ellas utiliza JDBC y la segunda, Hibernate, tercera, JDBC. El problema es que los cambios realizados por la función Hibernate no son visibles en las últimas funciones, que funcionan con JDBC.Hibernate y JDBC en una transacción
@Transactional
void update() {
jdbcUpdate1();
hibernateupdate1();
jdbcUpdate2(); // results of hibernateupdate1() are not visible here
}
Todas las funciones están configurados para utilizar la misma fuente de datos:
<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>
frijol myDataSource se utiliza en el código. myDataSource.getConnection() se utiliza para trabajar con conexiones en funciones JDBC y
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
...
}
});
se utiliza en función de hibernación. Gracias.
Para aquellos que llegarán desde Google, mi solución para este problema. Añadí session.flush() al final de la función de limpieza de hibernación. Después de esto, su resultado de escritura está disponible en la siguiente función de lectura jdbc (en la misma transacción). – alex543