java - Hibernate 和 JDBC 在一个事务中

标签 java hibernate spring jdbc transactions

我有一个方法,标记为@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/

相关文章:

spring - 什么是 Eureka 服务、 Eureka 客户端、 Eureka 实例和 Eureka 服务器

java - JAX-RS @PathParam : how to pass anything including "?"

java - 如何从另一个 map 迭代一个 map ?

java - 在JAVA中一次初始化多个以某些值开头的数字字段

java - Hibernate Criteria API 等同于 HQL select 子句?

java - 我需要将映射放入 hibernate 配置中吗

Hibernate:使用过滤器的基于鉴别器的 Multi-Tenancy ?

java - 分析软件--跟随行动--这叫什么?

java - 共享 JVM session

java - 仅使用一维数组顺时针遍历字符串