在@Transactional方法中加载延迟集合

时间:2013-01-23 04:56:56

标签: java spring hibernate

我尝试将集合加载到我的对象(我不能使用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;
    }
}

1 个答案:

答案 0 :(得分:0)

可能有很多原因。一旦拥有@Transactional注释并不是全部 - 您需要检查在Spring应用程序上下文中是否已正确配置事务管理器。然后你需要检查你的应用程序是否有适当的AOP支持,以便Spring可以自动启动和完成使用@Transactional注释的方法的事务。

您还需要一个合适的事务管理器,例如:在您使用Hibernate的情况下,您需要配置HibernateTransactionManager。

调试Spring / Hibernate发出的实际SQL语句来检查你的事务是否真的正常工作也很有帮助

Chapter 11 of the spring manual is a good reading for this topic.