我有一个方法,标记为@Transactional。 它由几个函数组成,其中一个使用 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 {
...
}
});
用于 hibernate 功能。 谢谢。
最佳答案
首先,在使用 hibernate 时避免使用 JDBC。
然后,如果您真的需要它,请使用 Session.doWork(..)
.如果您的 hibernate 版本还没有此方法,请从 session.connection()
获取 Connection
。
关于java - Hibernate 和 JDBC 在一个事务中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4153199/