2017-03-13 11 views
1

私は、バネ・データJPAを使用してOracleデータベースにデータを挿入/更新しています。私がdataSourceおよび/またはplatformTransactionManagerを明示的に指定していないと、すべて正常に動作し、データを挿入/更新できます。 platformTransactionManagerとしてDataSourceTransactionManagerと指定した場合、例外はスローされませんが、データはデータベースに挿入されません。DataSourceTransactionManagerはデータを永続化しません

コミットの問題のようです。このデータソースを使用すると、発生していない明示的なコミットが必要と思われます。そのため、データは実際には永続化されません。私はspring.datasource.tomcat.defaultAutoCommit: trueを指定しようとしましたが、それは助けになりませんでした。

すべてのトランザクションの完了時にどのようにコミットすることができるかに関するアイデア。私の挿入/更新コードは、この

@Transactional 
@Override 
public OrderEntity save(OrderResponse order) { 
    OrderEntity o = orderRepository.unwrap(order); 
    return orderRepository.save(o); 
} 

トランザクションマネージャ豆のようになります。

@Primary 
@Bean 
public PlatformTransactionManager txManager(DataSource dataSource) { 
    return new DataSourceTransactionManager(dataSource); 
} 

- ここ

問題を示すサンプルプロジェクトです。私はここでH2を使用していますが、単にtransactionManagerを追加することにより、データがもはや

sample project

+1

あなたは '@ EnableTransactionManagement'を使っていますね。 –

+0

はい、私は構成クラスでそれを持っています – adeelmahmood

+0

H2データベースでも問題を示すサンプルプロジェクトを追加しました – adeelmahmood

答えて

1

保持されません私はこのケースでは、dataSourceTransactionManagerが使用されてentityManagerに縛られていなかったと思うので、問題はjpaTransactionManagerを使用することによって修正されましたJPAによって

関連する問題