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
}