データベースに格納されているツリー構造を構築します。関係は、データベーステーブルのid、parend_idフィールドに基づいて構築されます。私は春のデータと冬眠を使用しています。同じエンティティを持つFetchtype.LAZY
ツリー構造にアクセスするために、エンティティクラス "Node"と "NodeRepository"を構築します。エンティティクラスには属性 "children"があり、それ自身に@OneToMany関係があります。
ノードを取得することは問題ありません。しかし、トランザクション環境の外部での遅延読み込み(「遅延コレクションの初期化に失敗しました」)のために、子をフェッチすることは問題になります。
私はFetchmodeを熱心に変更しました。しかし、それはまた、それ自体との関係のために問題であり、それは、木構造全体がフェッチされることに終わった。
このケースでは、片方の子供の読書を容易にし、反対側の全体の構造を取得しないようにするのがベストプラクティスですか?
私は、完全な答えを書く/重複した質問を探す時間はありませんが、遅延プロパティの条件付き読み込みに依存するように設計されたJPA 2.1の機能である*エンティティグラフ*を読むことをお勧めします。 – Gimby
私はすでに@ NamedEntityGraphを見ましたが、再帰的関係のために私の問題を解決できないと思います。どの時点で、私は子供を得るためのヒントを置かなければならないのですか? – st4rbuck
私はHibernateが仕様を強制する理由を理解していないので、怠惰なコレクションをデタッチされたエンティティにロードすることはできません。個人的にはこれが私がEclipseLinkを好む理由の1つです。なぜなら、EclipseLinkがJPAリファレンス実装であっても、理にかなっていないため、開発者にとっては完全な痛みであるためです。 –