0

基本的にDAOのラッパーであるWebサービスがあります。Web サービス/DAO を呼び出して、エンティティのコレクションを要求しています。

「親」エンティティ クラスには、「子」エンティティ オブジェクトのコレクション、つまり 1 対多の関係が含まれます。「親」エンティティ コレクション (つまり、myDAO.findAll()) を取得する DAO メソッド呼び出しは問題なく返されますが、Web サービス呼び出しの最終結果は次の例外です。

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: Station.observations, no session or session was closed

背景情報:

Station と Observations の 2 つのエンティティがあります。Station エンティティ (「親」) には、Observations オブジェクト (「子」) のコレクションが含まれています。

Station エンティティの DAO クラスである StationDao には、呼び出されるメソッド findAll() の次のコードがあります。

private SessionFactory sessionFactory;

private Class<T> persistentClass;

public List<T> findAll()
{
    return getCurrentSession().createQuery("from " + persistentClass.getName()).list();
}

この場合、親のコレクションが返される前に、親 (ステーション) に関連する子 (観察) のコレクションが完全に取得されることに関心はありません。ただし、応答で親 (ステーション) オブジェクトのコレクションを返す前に、これらの子 (観測) オブジェクトを完全にフェッチしようとしているようですが、元のセッションが利用できなくなったため、これは失敗しています。

このエラーを回避する方法を誰かが提案できますか? おそらく、リクエストの存続期間にわたってセッションを永続化する方法はありますか?

よろしくお願いします。

--ジェームズ

4

1 に答える 1

0

呼び出し後に永続オブジェクトを使用したために「ロールのコレクションを遅延初期化できなかった」という状況が発生しました

HibernateTemplate.clear()

セッションはまだアクティブでしたが、古いオブジェクトはアクティブではありませんでした。問題を解決する1つの可能な方法は、セッションからオブジェクトを再度取得することでした。

于 2012-09-12T14:59:43.910 に答える