Grails SearchablePluginがHibernateAutoFlushでエラーを引き起こすのはなぜですか?
-
27-10-2019 - |
質問
トラブルシューティングしようとしている
問題は、大きなセットのドメインクラスにインデックスを付けようとすると、Grailsが次のようにスローし続けることです。
エラーhibernate.AssertionFailure- アサーションエラーが発生しました(これは Hibernateのバグを示していますが、 安全でない使用が原因である可能性が高い セッション) org.hibernate.AssertionFailure: コレクション[ドメインクラス]はそうではありませんでした flush()によって処理されます
ただし、関連するドメインクラスは、検索可能なプラグインの呼び出し以外の問題なしに、 hibernate によってマッピングおよび使用されています。 。
検索可能なプラグインの使用方法は次のとおりです。
compass.openSession()
を使用してコンパスセッションを作成する- コンパストランザクションの開始:
compassSession.beginTransaction()
- 次に、
compassSession.create(result.get(0))
が重要なインデックス付けされていないドメインクラスで呼び出されます- 最後に、
compassTransaction.commit()
が呼び出されてトランザクションがコミットされます。- 2に移動して次のドメインクラスを処理する
3番目と4番目のドメインクラスの間で、エラーをスローする自動フラッシュがトリガーされます。
この問題を解決する方法について誰かにヒントを教えてもらえますか?
以前にこの問題に遭遇したことがありますか?
.5より前のバージョンでのシステム上の問題があったことは知っています。 searchable-plugin。の問題が完全に修正されていない可能性はありますか?
解決
flush()
-edされます。
変更が発生する前に、すべての読み取り専用クエリをトランザクションの外部に移動し、withTransaction{}
で変更を行うことが可能な場合があります。