遅延コレクションは、Hibernate.initialize(parent.getCollection()) を使用してロードできますが、親オブジェクトをアクティブなセッションにアタッチする必要があります。
このソリューションは、親エンティティと遅延読み込みフィールドの名前を取得し、コレクションが完全に読み込まれたエンティティを返します。
残念ながら、新しく開いたセッションに親を再アタッチする必要があるため、レイジー コレクションへの参照を使用することはできません。これはエンティティのデタッチされたバージョンを参照するためです。したがって、fieldName とリフレクションです。同じ理由で、これは添付された親エンティティを返さなければなりません。
したがって、OP シナリオでは、ユーザーが遅延コレクションを表示することを選択したときに、この呼び出しを行うことができます。
Parent parentWithChildren = dao.initialize(parent,"lazyCollectionName");
メソッド:
public Entity initialize(Entity detachedParent,String fieldName) {
// ...open a hibernate session...
// reattaches parent to session
Entity reattachedParent = (Entity) session.merge(detachedParent);
// get the field from the entity and initialize it
Field fieldToInitialize = detachedParent.getClass().getDeclaredField(fieldName);
fieldToInitialize.setAccessible(true);
Object objectToInitialize = fieldToInitialize.get(reattachedParent);
Hibernate.initialize(objectToInitialize);
return reattachedParent;
}