私は現在、envers を使用して自分のデータベースを監査していますが、それは素晴らしい仕事をしています。さまざまなエンティティを解析し、結果を UI に表示しましたが、これもうまく機能します。
私は今、パフォーマンスの問題に達しました。レコードを取得するためにエンティティにクエリを実行していますが、このクエリには約 5 秒かかります。SQL を実行すると、多くの単純な SQL が表示されます。クエリはかなり後退しているようです。
例で説明するのが一番です
私が照会している私のエンティティはHouse
Room
これは(はい奇妙な例;))と1対1です
MyHouse
には、 を参照するフィールドがありますRoom
。ルームは DB レベルで House を認識していませんが、hibernate に mappingBy フィールドがあります。
現在、部屋には他のパラメーター、たとえば窓やドアなどの家具のリストもあります。
家を照会して呼び出すHouse.getRoom().getId()
と、envers が Room 内のすべてのパラメーターも照会しているように見えます。すべての家具情報、すべてのウィンドウ情報などを引き出します。監査したいのは部屋だけなので、基本的な文字列または整数である壁の色などの部屋の単純なパラメーターのみを比較します。
私の休止状態の構成は、パラメーターに応じて簡単かつ遅延フェッチですが、Envers がすべてをプルしているように見えます。
興味深いことに、リレーションシップが逆の場合 (Room エンティティに House ID がある場合)、room.getHouse().getId() を呼び出してもすべてがプルされないことがわかりました。
これは休止状態の癖ですか、それとも私はそれをどのように使用していますか?
Room にあるものを読み取るためだけに envers を取得するにはどうすればよいですか? getFurnitureList() を呼び出すと、イージーではなく遅延ロードが試みられますか?
前もって感謝します
編集 私は射影を見てきましたが、これを使用してこのオブジェクトから特定の変数を返すことができるかどうか疑問に思っています。これが私の問題を解決できるかどうか誰かが知っていますか? 私はまだそれらを調査していますが、どんな提案でも大歓迎です
ありがとう