2016-12-18 8 views
0

私は、jpSourceでjpatransactionmanagerを使用しています。プロバイダはHibernateです。JpaRepository saveはすべてのエンティティをフラッシュします

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactoryBean" /> 
</bean> 

私は3つのエンティティに「Aentity、Bentity」と言います。 AとBは1対1の関係を持つ。第3のエンティティCentityがあります。地方の永続性は、義務と腹心から独立しています。しかし、Centityが保存されると、AentityとBentityが自動的にdbにフラッシュされます。私はこの振る舞いを制御したいと思って、自分のリポジトリを使ってsaveを呼び出すときにそれらが永続化されるようにしたい。

その他インフォメーション:AentityはCentityのためのB. トランザクション情報のためにcascaseた がある:プロパゲーション:新しいと隔離=デフォルト

を必要と私は多くのフォーラムで見てきたが、ヒント/解決策を見つけることができませんでした。

+0

Hibernateは 'Session'における管理対象エンティティを保持します。 「セッション」は、フラッシュと呼ばれるプロセスを通じてデータベースと同期されます。 'Session'がフラッシュされるときは' Session'の[flush strategy](http://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/FlushMode.html#AUTO)によって制御されます。デフォルトの戦略は 'AUTO'です。これは' SELECT'クエリを実行する前に[時には 'Session'](https://dzone.com/articles/dark-side-hibernate-auto-flush)をフラッシュします。フラッシング戦略は変更できます(http://stackoverflow.com/questions/24778966/jpa-change-default-flushmode-from-auto-to-commit)。 – manish

答えて

0

自動コミットが有効なので、saveメソッドを呼び出すとすぐにエンティティがデータベースにフラッシュします。 これを試してみてください。

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> 
<bean id="transactionManager" 
class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
<property name="sessionFactory" ref="sessionFactory" /> 

+0

保存が呼び出されていないエンティティも保存されます。それが問題です。私は、jpatransactionmanagerが永続性コンテキストで動作すると信じています。私はこの側面を微調整できるプロパティがあります。この場合、HibernateTransactionManagerを使用することは役に立ちません –

関連する問題