注釈ベースのトランザクション管理は初めてです。spring 3.1、Hibernate 3.2 で Web アプリケーションを開発しています。@Transactional に問題があります。以下のように子のセットを持つ POJO をロードします: 親クラスは DealerMember のセットを持つ DealerMaster なので、次のように宣言します。
ディーラーマスターで:
@OneToMany(fetch = FetchType.LAZY,mappedBy = "dealerMaster")
@Cascade({ CascadeType.SAVE_UPDATE, CascadeType.DELETE_ORPHAN})
public Set<DealerMember> getDealerMembers() {
return this.dealerMembers;
}
HibernateUtil クラスを使用して任意のクエリを実行しているため、load メソッドを使用しています。
public static Object loadObject(Session paramSession, Object paramObject)
throws Exception
{
try
{
paramObject = paramSession.load(paramObject.getClass(), getId(paramObject));
}
catch (HibernateException localHibernateException)
{
setErrorMessage(paramObject, localHibernateException.getMessage());
localHibernateException.printStackTrace();
}
今、私の問題はロードメソッドが正常に実行されることですが、paramObject でコースを移動すると次のように表示されます。
com.sun.jdi.InvocationException occurred invoking method.
すべての値は、エラーをスローするコントローラー側でアクセスしようとした場合にのみ、サービスレイヤーでアクセスできます:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.lbt.model.DealerMaster.dealerMember, no session or session was closed
同じ問題をグーグルで調べたところ、これは遅延読み込みに関連していることがわかりましたが、lazy = false としても fetchType.Eager を試しましたが、同じ問題でした。