0

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

有人能告诉我我在这里想念什么吗?

我有设置

<property name="hibernate.current_session_context_class">thread</property>

在 hibernate.cfg.xml 文件中

我在 Servlet 过滤器中创建了以下代码

 try{
  factory.getCurrentSession().beginTransaction();  
  httpRequest.getRequestDispatcher("/public/index.html").forward(httpRequest,response);
 }finally{
  factory.getCurrentSession().getTransaction().commit();  
 }

在 index.xhtml 文件中,我有以下调用:


做一些事情

index.xhtml 正在使用使用 ui 包含加载 menu.xhtml 文件的模板。菜单文件然后插入菜单列表。从 menuItemsViewController 调用 servicesMenuItems 最终以以下代码结束

 public Collection<Bulletin> getBulletin(User bean){
   Session session=factory.getCurrentSession();
   try{
     session.refresh(bean);
     if(bean.getObligations().size()>0){
     do some stuff
   }

如您所见,会话存在,什么时候session.refresh(bean)不是抛出异常而是bean.getObligations()抛出,

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

任何想法为什么?

4

2 回答 2

0

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

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

于 2015-04-26T03:13:42.163 回答
0

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

Hibernate Eager vs Lazy Fetch 类型

您可以更改惰性属性或必须自己填写义务。

于 2015-04-24T04:52:41.697 回答