org.hibernate.LazyInitializationException:延迟初始化角色集合失败:无法初始化代理-无会话

org.hibernate.LazyInitializationException:延迟初始化角色集合失败:无法初始化代理-无会话,hibernate,jsf,hibernate-session,Hibernate,Jsf,Hibernate Session,我不明白为什么会这样。根据代码路径,当引发此异常时,我应该在同一线程中,并且会话应该存在 有人能告诉我这里缺少什么吗 我已经准备好了 <property name="hibernate.current_session_context_class">thread</property> 在index.xhtml文件中,我有以下调用: 做点什么 index.xhtml使用的模板使用ui包含加载menu.xhtml文件。然后,菜单文件将插入菜单列表。 来自menuItems

我不明白为什么会这样。根据代码路径,当引发此异常时,我应该在同一线程中,并且会话应该存在

有人能告诉我这里缺少什么吗

我已经准备好了

<property name="hibernate.current_session_context_class">thread</property>
在index.xhtml文件中,我有以下调用:


做点什么

index.xhtml使用的模板使用ui包含加载menu.xhtml文件。然后,菜单文件将插入菜单列表。 来自menuItemsViewController的ServicesNuItems调用最终以以下代码结束

 public Collection<Bulletin> getBulletin(User bean){
   Session session=factory.getCurrentSession();
   try{
     session.refresh(bean);
     if(bean.getObligations().size()>0){
     do some stuff
   }
公共集合getBulletin(用户bean){ Session Session=factory.getCurrentSession(); 试一试{ 会话刷新(bean); if(bean.getResponsibilities().size()>0){ 做点什么 } 正如您所看到的,当
session.refresh(bean)
未引发异常,但
bean.getResponsibilities()
引发异常时,会话存在

未能延迟初始化角色集合: data.User.Responsibilities,无法初始化代理-无会话“


知道为什么吗?

默认惰性属性为true。这意味着hibernate不会填充实体上的对象属性。在这种情况下,hibernate不会填充用户bean中的义务。当您尝试获取义务时,将抛出异常


您可以更改lazy属性,也可以自己填写义务。

好的。我已经解决了这个问题,但仍然不知道是什么原因造成的。。。 在仔细检查我的代码后,我注意到我正在将用户置于会话中..在第一次尝试时,一切正常,在第二次尝试游荡页面时,发出了异常


每次尝试访问页面时,我都开始清除会话并将用户置于会话中。现在我再也看不到异常了…

当尝试在事务边界之外创建延迟初始化对象时,可能会出现该异常的重复。您需要精确初始化延迟初始化为了在事务边界之外使用这些对象,您可以使用fetch连接。消除异常的方法之一是使用fetch连接。您还可以滥用eager fetch类型,而我从来没有想过使用它。另一方面,JSF与此问题完全无关。
 public Collection<Bulletin> getBulletin(User bean){
   Session session=factory.getCurrentSession();
   try{
     session.refresh(bean);
     if(bean.getObligations().size()>0){
     do some stuff
   }