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

标签 java mysql spring hibernate transactions

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

这是我的 Spring、Hibernate 配置:

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

并且我的类使用“@Transaction”注解声明以打开事务并在出现异常时回滚。 但是我需要在对数据库进行重要插入后强制提交。如何做到这一点?

这是示例代码:

@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 创建了一个私有(private)事务方法,但如何使其他组件(例如 printer.print() 等)内的所有实体延迟加载失败。

最佳答案

解决方案是:

@Transactional(noRollbackFor=Exception.class)

关于java - Hibernate和Mysql,事务自动提交只是一个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873267/

相关文章:

java - @ConditionalOnProperty on TYPE level w/@Configuration

java - Firestore : Query all the elements in array in android

mysql - mysql case 语句未显示在结果中时不匹配

java - JTabbedPane的选项卡区域添加按钮,可以显示,但无法点击

php - 管理面板 : PHP form doesn't send data to MySQL

mysql - SQL 获取多年平均销售成本

java - Spring 安全 : Allow admin to do everything

java - 如何在后端获取 HTTP 请求的用户所在国家/地区?

java - 平衡鹅卵石问题

java - Android如何知道应用程序已启动并根据启动时间确定应用程序优先级