私はJavaのメソッドを持っていて、spring Transactional
アノテーションでラップされています。Spring Transactionalアノテーション、READ_UNCOMMITTEDのアイソレーションが機能しない
私は2つの操作を内部に持っています.1つはdelete
、もう1つはinsert
です。私の挿入ステートメントは、最初の操作(これはdelete
)に依存しなければなりませんが、最初の操作がまだコミットされていないため、挿入が失敗します(ユニーク制約)。しかし、これはおもしろいことですが、通常は同じトランザクション内で、私は同じトランザクションでコミットされていない操作を読み書きできるはずです(私の古い独自のフレームワークはこれを行うことができます)。しかし、これは私のシナリオでは起こりません。データがまだ削除されていないことがわかるため、挿入は失敗します。
アイソレーションREAD_UNCOMMITTED
を使用しようとしましたが、機能しません。
これらの2つの操作を同じトランザクションで実行する必要があります。いずれの操作も両方の操作をロールバックする必要があるため、最初の操作をコミットできず、2番目の操作に進むことができません。
Springフレームワークでどうすればいいですか?
休止状態で一般
のいずれかにモードタイプをフラッシュするように設定することができます
EntityManager.setFlushMode()
方法を見てみましょう常に特定の注文に従います "、私が参照できる文書はありますか?これには何らかの理由があるはずです... – GMsoFこのhttp://docs.oracle.com/javaee/6/api/javax/persistence/FlushModeType.htmlによると、私の設定は "auto"としてデフォルトにする必要がありますそれは "すべてのクエリの実行"の前にフラッシュされませんか? – GMsoF
http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/event/def/AbstractFlushingEventListener.html#performExecutions%28org.hibernate.event.EventSource%29 – shankarsh15