2017-05-15 8 views
1

私は複数のテーブルにデータを挿入する必要があるシナリオがあります。 1つのクエリが失敗した場合、私は私のサービスメソッドは、私が最初の挿入が実行され、第2の挿入が失敗した場合、最初の挿入はロールバックし、最初の挿入が失敗した場合になりたい春のデータ一貫性を維持する

@Service 
@Transactional 
public class ServiceNameImpl implements ServiceName{ 
    @Autowired 
    private ABCRepository abcRepository; 

    @Autowired 
    private BCDRepository bcdRepository; 

    @Override 
    public SChResource save(SchData schData){ 
     SchSch sch = new SchSch(); 
     Contact con = new Contact(); 
     sch.setName(schData.getName()); 
     abcRepository.save(sch); --first insertion 
     con.setAddress(schData.getAddress()); 
     bcdRepository.save(con); --second insertion 
     return null; 
    } 
} 

で最後に実行されたクエリ

をロールバックしたいです2回目の挿入が実行され、2回目の挿入がロールバックされます。

私は何をすべきか教えてください。

+0

'save()'メソッドをトランザクションにしたいようです。 – Kayaman

+0

これはあなたのサービスが '@ Transactional'で動作するはずです。動作していなければ、この質問にはあなたの質問に答えるための情報がありません。 –

+0

@M。 Deinum私は@Transaction(readOnly = true)または@Transactional(readOnly = false)を使用する必要があると混同しています。このサービスクラスにはトランザクションを行いたくない他のメソッドがあるので、 – ankit

答えて

0

私は、あなたのABCRepositoryBCDRepositoryに、春データJpaを使用し、JpaRepositoryまたはスーパークラスまたは子クラスを拡張していると思います。

この場合、@Configurationを持つクラスのいずれかに@EnableTransactionManagementを追加する必要があります。

+0

ええ私はJpaRepositoryを拡張していますが、あなたが言及した2番目の点を得ていません – ankit

+0

EnableTransactionManagementアノテーションを使用していますか?使用していない場合、このメソッドはConfigurationアノテーションを持つクラスで使用できます。 –

+0

applicationcontext.xmlファイルに、アノテーション駆動のトランザクションのアクティブ化がありません。 '' –

0

注意点:@Transactional注釈。 javax.transactionではなく、org.springframework.transaction.annotationパッケージから使用する必要があります。貼り付けたコードスニペットには表示されませんが、過去にこのミスに遭遇しました。そのため、ここではそうだと思いました。

関連する問題