Hibernate和Mysql,事务自动提交只是一个部分

时间:2013-06-01 13:33:35

标签: java mysql spring hibernate transactions

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

这是我的Spring,Hibernate配置:

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

我的类声明了一个“@Transaction”注释,以便在Exception的情况下打开事务和回滚。 但是我需要在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创建一个私有事务方法,但是如何在其他组件(例如printer.print()等等)中实现所有延迟加载的实体失败。 / p>

3 个答案:

答案 0 :(得分:2)

解决方案是:

@Transactional(noRollbackFor=Exception.class)

答案 1 :(得分:1)

我担心你可以通过hibernate中的任何API或配置来实现它。我能想到的唯一的approcah就是在多种方法中破解你的方法,只在需要的地方设置@Transactional。

答案 2 :(得分:1)

transactionManager注入该方法的bean,并在需要时执行commit / rollback。看看my answer in this question