1

我需要拒绝一小部分方法的事务回滚,我不知道该怎么做,因为在方法的其他部分我需要标准行为。

这是我的 Spring,Hibernate 配置:

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

我的类是用“@Transaction”注释声明的,以在出现异常时打开事务并回滚。但是,我需要在对 db 进行重要插入后强制提交。这个怎么做?

这是示例代码:

@Transactional
public void myMethod(Object obj){
   check.do();
   check.control();
   try{
      dao.insert(obj);
      fileWriter.write();
      printer.print();
   }catch(Exception e){
      log.error(e);
   }
}

我在 try 语句 (dao.insert) 中所做的事情必须在自动提交中,因为在插入回滚事务之后我不希望这样做。在我的示例中,如果 printer.print() 失败,我不希望 dao.insert() 回滚。但是,我仅在此尝试中才需要此行为。

谢谢

编辑

我还尝试远程 @Transactional 注释并仅为 dao.insert 创建一个私有事务方法,但是 tt 会导致其他组件内的所有延迟加载实体失败(例如,printer.print() 等)。

4

3 回答 3

2

解决方案是:

@Transactional(noRollbackFor=Exception.class)
于 2013-06-02T10:41:34.050 回答
1

恐怕您可以通过hibernate中的任何API或配置来实现它。我能想到的唯一方法是将您的方法分解为多种方法,并仅将 @Transactional 设置为所需的内容。

于 2013-06-01T13:38:42.157 回答
1

将 注入该transactionManager方法的 bean 并在需要时通过它执行commit/ 。rollback看看我在这个问题上的回答

于 2013-06-01T22:58:25.653 回答