java - 回滚所有以前的 hibernate 事务

标签 java spring hibernate hibernate-criteria rollback

我有两个表,我正在使用 hibernate 来保存数据。如果最后一个表在保存过程中出现一些错误,我想回滚所有表中的事务。

例如,我有两个表,分别命名为 Term 和 Card Acceptor,我将数据一一保存在其中。以下是两个表的函数:

@Autowired
private SessionFactory sessionFactory;

Transaction tx = null;

public SessionFactory getSessionFactory() {
    return sessionFactory;
}

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}
@Override
public TmCardAcceptor saveCardAcceptor(TmCardAcceptor cardAcceptor) {
    // TODO Auto-generated method stub

    // Acquire session
    Session session = sessionFactory.openSession();
    // Save employee, saving behavior get done in a transactional manner
    //session.save(cardAcceptor); //previous method
    try {


        tx = session.beginTransaction();
        session.save(cardAcceptor); 
        tx.commit();


    } catch (HibernateException e) {
        try{
        tx.rollback();
    }catch(RuntimeException rbe){
    }
    throw e;
    } finally{
        if(session!=null){
            session.close();
        }
    }

    return cardAcceptor;        

}

@Override
public Term saveTerm(Term term) {
    // TODO Auto-generated method stub

    // Acquire session
    Session session = sessionFactory.openSession();
    // Save employee, saving behavior get done in a transactional manner
    //session.save(cardAcceptor); //previous method
    try {


        tx = session.beginTransaction();
        session.save(term); 
        tx.commit();


    } catch (HibernateException e) {
        try{
            System.out.println("Rolling back Term");
        tx.rollback();
    }catch(RuntimeException rbe){
    }
    throw e;
    } finally{
        if(session!=null){
            session.close();
        }
    }

    return term;        

}

如果条款表中有错误,此代码不会回滚卡接受器。请帮忙,如何实现此目的...

最佳答案

我认为你误解了交易系统。

一笔交易应该是ACID (Atomicity, Consistency, Isolation, Durability)

提交事务后,更改就完成了,您必须手动撤消它。如果您希望链接 Term 和 CardAcceptor,则只需打开 1 个事务,保存这两个对象,然后提交。

关于java - 回滚所有以前的 hibernate 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59033595/

相关文章:

java - 使用 SwipeRefreshLayout 刷新 ListView

java - 如何使用Spring Boot为传记后端制作实体类和 Controller ?

java - 将自定义 UserDetailsS​​ervice Autowiring 到 AbstractAuthenticationProcessingFilter

java - 配置Spring bean

java - 如何使用@PersistenceContext 注解的 `properties` 属性?

java - Hibernate:获取脏实体的持久状态

java - org.hibernate.id.IdentifierGenerationException : ids for this class must be manually assigned before calling save():

java - OutOfMemory PermGen 错误 - 获取此错误的方法

java - 正则表达式未从所有字段中获取正确的值

java - Tomcat 容器使用<error-page> 配置失败,如果响应对象的OutputStream 打开后出现异常