我不明白为什么会这样。根据代码路径,当引发此异常时,我应该在同一个线程中并且会话应该存在。
有人能告诉我我在这里想念什么吗?
我有设置
<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,无法初始化代理 - 无会话”
任何想法为什么?