0

オブジェクトにコレクションをロードしようとしました (FetchType.EAGER を使用できません) が、次の例外が発生します:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: Produkt.opinie, could not initialize proxy - no Session

@Transactional スコープで実行しているため、理由がわかりません。

@Service
@Transactional
public class ProduktService extends AbstractService implements IProduktService {


    public Produkt findProduktById(Integer id) {
        Produkt produkt = (Produkt) getSessionFactory().getCurrentSession()
                .get(Produkt.class, id);
            produkt.getOpinie();
        return produkt;
    }
}
4

1 に答える 1

0

多くの理由が考えられます。@Transactional アノテーションを付けるだけでは不十分です。Spring アプリケーション コンテキストでトランザクション マネージャーが適切に構成されていることを確認する必要があります。次に、Spring が @Transactional アノテーションが付けられたメソッドでトランザクションを自動的に開始および終了できるように、アプリケーションが適切な AOP サポートを持っていることを確認する必要があります。

また、適切なトランザクション マネージャーも必要です。たとえば、Hibernate を使用しているため、HibernateTransactionManager を構成する必要があります。

また、Spring / Hibernate によって発行された実際の SQL ステートメントをデバッグして、トランザクションが本当に適切に機能しているかどうかを確認することも役立ちます。

このトピックについては、スプリング マニュアルの第 11 章を読むとよいでしょう。

于 2013-01-23T05:02:03.967 に答える