2017-09-23 19 views
0

私のコードでは、updateメソッドはおそらくnullを返し、このメソッドを呼び出すトランザクションに影響します。Springデータ:更新でnullが返されるとトランザクションがロールバックされます

実行時例外をスローするか、ユーザーがチェック例外を指定するだけでロールバックアクションがトリガーされるので、nullが返されてもトリガーされます。

サービス1

public class Service1 { 

    @Autowired 
    private Service2 service2; 

    @Autowried 
    private Service1Repository service1Repository; 

    @Transactional 
    public Entity1 update(Entity1 entity) { 
     service1Repository.update(entity); 

     // if this method return null, above update will rollback. Otherwise, it will be executed success. 
     service2.update(entity.getId()); 

     return entity; 
    } 
} 

サービス2:

public class Service2 { 
    @Autowired 
    private Service2Repository service2Repository; 

    @Transactional 
    public Entity2 update(Integer id) { 
     Entity2 entity = service2Repository.findOne(id); 

     // No need to update HIDDEN status entity 
     if (Status.HIDDEN.equals(entity.getStatus())) { 
      return null; 
     } 

     entity.setOtherAttribute("xyz"); 
     service2Repository.update(entity); 

     return entity; 
    } 
} 

答えて

0

戻りnullService2.update()方法から、それは通常のコードの実行であるとして、データベースのトランザクションをロールバックしません。また

、春documentationに述べたように:

どれRuntimeExceptionは、ロールバックをトリガして、任意のチェック例外はありません。

+0

はい、私もそうだと思いますが、これは実際に私のコードで起こったので、この状況は重複しないようにしたいだけです。 – sgyyz

+0

コードで期待どおりに動作しませんでしたか? – lzagkaretos

+0

私のService2update()が実行されると、Service1.update()はデータを更新しません。 service1Repository.update()はデータをロールバックします。 – sgyyz

関連する問題