我的Spring应用程序中出现了LazyInitializationException。我已经配置了OpenEntityManagerInViewFilter,所以我将所有关系设置为FetchType.LAZY,它们都有效。问题是当我尝试通过Spring Security访问会话中的用户并在JSP中打印LAZY信息时,如下所示:
<sec:authentication property="principal" var="userAuth"/>
${userAuth.organisation.id}
我得到了
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
虽然我可以毫无问题地执行$ {userAuth.username}
我有一个自定义身份验证提供程序,它只是一个使用Hibernate加载用户的DAO
<sec:authentication-provider user-service-ref="userDAOImpl">
奇怪的是,当我将组织对象设置为EAGER时,我遇到了同样的问题。
问题只发生在我尝试通过sec:authentication进行访问时。如果我将用户添加到模型中,然后访问jsp中的数据就可以了。
为什么我无法访问存储在链接到用户的Object中的数据?
由于
答案 0 :(得分:6)
因为您在用户登录时获取了主要信息,并在那时将它们存储在http会话中。
如果您尝试在以后的任何http请求中访问该对象的非初始化集合,则会关闭hibernate会话(获取主体的位置)(就在登录后),并且您将获得LazyInitializationException