2017-11-14 2 views
0

私はSpring DBトランザクション処理の奇妙な動作をしています。 dbServiceがJPA- CrudRepositoryへのアクセス権を持ついくつかの@Service級であるJPAリポジトリの読み取りアクセスは外部トランザクションをコミットします

@Transactional 
    public void saveDocumentToDB() { 

     dbService.addNewEntity('123', 'helloWorld'); 
     DbEntity dbEntity = dbService.getEntityByID('someId'); 

     throw new RuntimeException(); 
    } 

は、次のコードを考えます。

問題:getEntityByID -Methodが自動的に生成されたリポジトリオブジェクトのメソッドを呼び出すと、トランザクションがコミットされ、最初の 'add'-callがデータベースに書き込まれます。

この呼び出しがなければ、トランザクションはバックきれいに巻かれ...あなたが自動生成されたCRUD-メソッドを作成する方法のアドバイスを

を持っていますが、同様の取引を尊重?私のapplication.propertiesで

答えて

0

は、私は、Hibernateは、トランザクション(および外国キー)をサポートしていないのMyISAM-エンジン、でそのテーブルを生成し、その結果

spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect

を使用しました。

私は

spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect 

にそれを変更し、DBスキーマを再構築。

「MySQL5Dialect」というデフォルトのエンジンではなく、MyISAMを使用しているとは思えません。

将来的に誰かを助けるかもしれません。

関連する問題