JPAトランザクションのロールバックの問題

 春ブーツ、良いパッケージの総務を持って春データJPA春を使用して私のプロジェクトでは、@Transactionalノートに、トランザクションは、自動的に行わ異常自動ロールバックが、使用時の出会いでいくつかの問題されています。

実行エラーネスティング時間の方法、複数の方法で使用する@Transactional、時間エラーを実行するための方法の一つが、データの挿入が、他の2つの方法がありません。時には例外をスローしますが、ロールバックをしません......

  いくつかの情報を確認した、それはSpringの@Transactionalを使用するのは正しくないです。

  私は最後にSpringの@Transactionalを使用する方法を説明するために、次の借りに他の人のブログの例を見つけました:

@Service 
パブリッククラスSysConfigService { 

    @Autowired 
    、プライベートSysConfigRepository sysConfigRepositoryを 
    
    公共SysConfigEntity getSysConfig(文字列のkeyName){ 
        SysConfigEntityエンティティ= sysConfigRepository.findOne(keyNameの)。
        エンティティを返します。
    } 
    
    公共SysConfigEntity saveSysConfig(SysConfigEntityエンティティ){ 
        
        IF(entity.getCreateTime()== NULL){ 
            entity.setCreateTime(新しいDate())。
        } 
        
        sysConfigRepository.save(エンティティ)を返します。
                
    } 
    
    @Transactional 
    公共ボイドtestSysConfig(SysConfigEntityエンティティ)が例外をスロー{ 
        //不会回滚 
        this.saveSysConfig(エンティティ)
        新しい例外(「のsysconfigエラー」)を投げます。
        
    } 
    
    @Transactional(rollbackFor = Exception.class)
    公共ボイドtestSysConfig1(SysConfigEntityエンティティ)例外{スロー
        //会回滚
        this.saveSysConfig(エンティティ)
        新しい例外(「のsysconfigエラー」)を投げます。
        
    } 
    
    @Transactional 
    公共ボイドtestSysConfig2(SysConfigEntityエンティティ)は例外{スロー
        //会回滚
        this.saveSysConfig(エンティティ)
        新しいのRuntimeException(「のsysconfigエラー」)を投げます。
        
    } 
    
    @Transactional 
    公共ボイドtestSysConfig3(SysConfigEntityエンティティが){例外をスロー 
        //事务仍然会被提交
        this.testSysConfig4(エンティティ)
        新しい例外(「のsysconfigエラー」)を投げます。
    } 
    
    @Transactional(rollbackFor = Exception.class)
    公共ボイドtestSysConfig4(SysConfigEntityエンティティ)例外{スロー
        
        this.saveSysConfig(エンティティ)
    } 
    
    
    
}

  

一般的に使用される概要は春の@Transactionalは次のとおりです。

1. Aの方法は内の例外、A方式は、注釈を付けているだろうスロー
@Transactionalノートは、トランザクション伝播が生成され、デフォルトがPropagation.REQUIRED場合は2、ネストされたメソッド呼び出し、複数の
、3の場合にだけ書き込みノート@唯一のRuntimeExceptionではなく、例外のロールバックトランザクションのデフォルトのロールバック
もしロールバックの例外を確認したい場合は4は、あなたが@Transactionalする必要があります(rollbackFor = Exception.class)

おすすめ

転載: www.cnblogs.com/Andrew520/p/12144362.html