java - Hibernate 3 的两个事务问题

标签 java hibernate hibernate3

在我们的应用程序中,我们使用 Hibernate 3。最近我在事务中遇到了一个问题。我有一些代码如下

    method1()
    try{
    tx = session.beginTransaction();
    //New object which needs to be stored
    session.save(object);
    // Some code which generates exception
    tx.commit(); // Exception occured before commit processing
    }catch(Exception ex){
    e.printStackTrace();
    throw e;
    }finally{
    if(tx!=null && tx.wasNotCommited()){
    tx.rollback();
    }
    }

我有另一个与此相同的方法,即使在该方法抛出异常的情况下也会在该方法之后调用该方法。

这两种方法的 session 是相同的。

现在我遇到的是,如果我的第二个方法成功执行并提交 hibernate 事务,这会存储我不想要的第一个方法中保存的数据。

我无法分享确切的代码,但准备了一个与此问题类似的测试方法。我的数据库服务器是mysql。

package com.opshub.jobs.core;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.opshub.dao.core.Company;
import com.opshub.utils.hibernate.HibernateSessionFactory;

public class Test {

    public static void main(String[] args) throws Exception{
        Session session = HibernateSessionFactory.openSession();
        try{
            Transaction tx = session.beginTransaction();
            try{
                Company company = new Company();
                company.setName("Gaurav");
                company.setCompanyDetails("IT Company");
                company.setCompanyAddress("India");
                session.save(company);
                if(true)
                    throw new Exception("Now go to finally");
                tx.commit();
            }catch(Exception e){
                throw e;
            }finally{
                tx.rollback();
            }
        }finally{
            Transaction tx = session.beginTransaction();
            tx.begin();
            Company company = new Company();
            company.setName("Gaurav 1");
            company.setCompanyDetails("IT Company");
            company.setCompanyAddress("India");
            session.save(company);
//          if(true)
//              throw new Exception("Now go to finally");
            tx.commit();
        }
    }

}

如有任何帮助,我们将不胜感激。

最佳答案

终于找到了这个问题的解决方案。在开始另一个事务/操作之前,您可以使用 session.clear() 从 session 中删除所有挂起的保存/更新/删除操作。

所以在最后回滚时,只需添加 session.save() 即可。

感谢您的回复。

关于java - Hibernate 3 的两个事务问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27014249/

相关文章:

java - Hibernate 3 - 可以安全地重用 IntegerType/StringType 等对象吗?

java - 为什么使用 Epsilon 与 G1 相比,观察到重复的内存分配更慢?

java - 为什么 Java 集合不删除通用方法?

java - 为什么控制台给我 "Unable to find jdbc"

java - 从.sql加载模式以在Spring Boot中创建orm映射

新版本 Hibernate 的 hibernate3-maven-plugin 依赖项

java - 计算数据矩阵中的空单元格 xlsx

java - hibernate 恩弗斯 : Audit @CollectionTable field

hibernate - HQL在具有and max的情况下产生意外的AST节点

jdbc - 找不到JDBC驱动程序类:com.mysql.jdbc.Driver