我需要拒绝一小段方法的事务回滚,我不知道该怎么做,因为在方法的其他部分我需要标准行为。
这是我的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>
答案 0 :(得分:2)
解决方案是:
@Transactional(noRollbackFor=Exception.class)
答案 1 :(得分:1)
我担心你可以通过hibernate中的任何API或配置来实现它。我能想到的唯一的approcah就是在多种方法中破解你的方法,只在需要的地方设置@Transactional。
答案 2 :(得分:1)
将transactionManager
注入该方法的bean,并在需要时执行commit
/ rollback
。看看my answer in this question。