Hibernate-reactive: session.remove && session.getReference

作成日 2020年09月07日  ·  3コメント  ·  ソース: hibernate/hibernate-reactive

こんにちは、私が理解しているように、jpaに続いて、切り離されたエンティティを削除する唯一の方法があります:

factory.withTransaction((session, transaction) -> 
    session.merge(sampleEntity).invokeUni(session::remove)
).await().indefinitely();

すべて問題ありませんが、パフォーマンスの場合、マージ操作には時間がかかり、実際のパフォーマンスの問題が発生する可能性があります。 たとえば、私の不正確な時間測定によると、5000エンティティの削除には約4秒かかりますが、Hibernate-ormでは50ミリ秒かかります。

指定されたエンティティの永続インスタンスを返すsession.getReferenceという新しいメソッドについて読んだばかりです。 session.remove使用を許可することは可能ですか?

bug

全てのコメント3件

指定されたエンティティの永続インスタンスを返すsession.getReferenceという新しいメソッドについて読んだばかりです。 session.remove使用を許可することは可能ですか?

ああ、良い点です、絶対にあなたはそれをすることができるはずです。 #360で動作するようにしました。

ただし、最初にオブジェクトをフェッチせずにオブジェクトをremove()する方法はないことを理解してください。 これは、 remove()は、セッション内のエンティティの状態に依存するカスケード削除やコレクション削除などのセマンティクスがあるためです。

エンティティをフェッチせずに削除できるようにする必要がある場合は、 StatelessSession.delete()またはHQL deleteクエリを使用する必要があります。

@ Xset-s PSこれを報告してくれてありがとう、それは私の側の大きな見落としでした

問題ありません。操作の削除に関する詳細な回答と非常に迅速な修正に感謝します。 私は現在実験を行っており、新しい素晴らしいライブラリを使用してサーバー側アプリケーションを書き直しているので、それだけでしかキャプチャできない(または多数のテストを使用して😄)いくつかのトリッキーな問題を簡単に見つけることができます

このページは役に立ちましたか?
0 / 5 - 0 評価