との2つの操作を持つWebサービスで構成されるWebアプリケーションがcreateA
ありcreateB
ます。ハンドラーがエンドポイントに登録されます。このハンドラーはセッションを開き、要求を受信するとトランザクションを開始します。次に、要求された操作のコードが実行されます。応答が返送される前に、トランザクションがコミットされ、セッションが閉じられます。
のコードはcreateA
、タイプのエンティティを作成し、メソッドA
を使用してそれを永続化することで構成されています。Session.save()
DEBUGモードでは、Session.save()
が呼び出された後、セッションのActionQueueに1つの挿入があることがわかります。
のコードは次のものでcreateB
構成されています。
- 以前に作成されたタイプのエンティティを取得する
A
B
のインスタンスを参照するエンティティを作成しますA
(Bには、関連付けられたを表すプロパティがありますA
)A
の新しいインスタンスを参照するように更新していますB
Session.save()
の新しいインスタンスを呼び出すB
Session.update()
の新しい変更されたインスタンスを呼び出すA
ただし、DEBUGモードでは、Session.save()
andを呼び出した後Session.update()
、対応するセッションのActionQueueは空になります。しかし、トランザクションがコミットされた後、データベースに作成されたエンティティを確認できます。
操作createA
とcreateB
は、DEBUGなしでこの順序で呼び出されます。条件とメソッドを使用して以前に作成されB
たインスタンスを取得しようとすると、作成の実行中にエラーが表示されます。問題は、のインスタンスが見つからないことです。A
Session.list()
A
ただし、DEBUGで同じ操作シーケンスを繰り返すかThread.sleep(15s)
、2つの操作の呼び出しの間に使用すると、のインスタンスA
が見つかります。
ありがとう
編集:特定のマシンでは動作するが、他のマシンでは動作しないことを正確に忘れました。そして、これらのマシンの間に違いは見られません。