解决方案 »

  1.   

    你事务加载什么地方的 ? ps里面的代码怎么写的,是不是在ps这一层把session关闭了。
      

  2.   

    改成false也不行,因为我是照着一个别人的例子写的,那个例子中方法就是这么写的,是可以拿到的,而且他的lazy=true的,不知道怎么回事?想着有什么办法能够使这样的写法生效啊,是加了什么过滤器还是什么东东?他的那个例子工程已经很完善了,很大,我一时间找不到他是在哪里配置的!所以上来问问要达到这样的效果应该用些啥东西
      

  3.   


    ps是什么,我还不知道。我是在业务层加的事务么,当然按道理userService.findById(u.getUsid())得到User后事务完成,session就关闭了已经。主要是我看别人这么写的是可以的,不知道是不是配置了什么东西,可能是配置了些什么呢?
      

  4.   

    你跟别人的例子是在同一个项目中吗!
    还有你这个usr是怎么来的
    查出来的?
    在传进来之前又role吗?
      

  5.   


    user是查出来的啊,在上面的方法中已经写了,传进来的时候应该没有吧,现在就是想着它能够再次打开session去查一下关联的role对象!
      

  6.   

    要么就所有关联实体和集合都设为casecade的,不设置用代理的话,就得使用长session,直到最后用完再进行事物的提交,而不要提前关掉session
      

  7.   

    你是不是先查询出来user 然后又在页面点击某个按钮触发方法把user传进去拿它的role的!我的意思是你把user查出来的时候打印一下role 看有没有 能拿到么
      

  8.   


    这个长session怎么用呢?我好像听过,但一直不知道怎么用啊,可能这就是我想要的东西吧!
      

  9.   


    这就是个函数调用,查出user后直接把它传给了获取权限的函数,我打断点了,role中好像是有值的,但是是这样的:这个不为null,看似有值,但是其内的值全是为null的,应该也是没有真实的拿到它所关联的那个对象吧;像是个代理???
      

  10.   


    这个usr查出来后直接就给了下面那个函数,没有往页面传啊;打断点后看到的是这个:值好像是不为null,但其内的属性怎么都是null呢,不对劲啊;是个代理????
      

  11.   


    这个usr查出来后直接就给了下面那个函数,没有往页面传啊;打断点后看到的是这个:值好像是不为null,但其内的属性怎么都是null呢,不对劲啊;是个代理????
    你是用了延迟加载吧 如果是在页面上的话 可以用opensessionview试试  不然你就不要设置延迟加载也好 实在要用延迟加载 在查出user的时候 返回user出来的时候 用user.role.name这种方式让user再去拿出role再返回出来也可以
      

  12.   

    no session有一种情况就是这样 你用了延迟加载 对象里面只是一个代理对象 然后在页面上要拿出来用的时候 那个时候session已经没了 所以就报no session 这时候用opensessionview就有用 如果是你把数据库从user查出来 再在后台传给别人用 那么你要么别设置延迟加载 要么就在拿出user的那个事物内把role再拿一次就ok了 你把user从数据库拿出来的方法总是有session的
      

  13.   


    那个role的代理对象是因为我对它采用延迟加载,所以hibernate用一个代理类来存储它的信息(只有id值);如若我再要role的其他属性值,hibernate就会去发送sql语句把它的所有内容全部加载进来,现在由于采用userService.findById()来得到user对象,且userService上加有事务,所以查完user之后,事务就关闭了(对于事务与session的关系一直不清楚,可能是事务一关闭,session就关闭了吧),所以再次请求role的其他信息时就出现了no session的错误;现在最主要的是我是照着一个大项目的此部分写的啊,它就是这么写的,而且它的取user的方法上也加有事务,人家是可以顺利在最后取到permissio的,我就是想不通了,他是怎么把它弄好的,是有什么配置项吗?看看您知道不知道怎么达到这个效果啊!
      

  14.   

    我找原因了,其实就是没有配置OpenSessionInViewFilter,只是以前配置的版本错了,我用的hibernate4的架包,但一直配置的是hibernate3,所以不行,改过来就好了!
      

  15.   

    嗯 问题解决了就好 no session大部分这个原因 
      

  16.   

    你使用了懒加载,使用懒加载session被关闭之后集合中就不能得到数据了,(因为集合中本来就没有数据,只是在你需要的时候进行查询);现在你可以将lazy设置为false,或者延迟关闭session
      

  17.   

    如果你的类是通过向导生成的话,User与Role之间的关系是双向的多对一
    就去找User.hbm.xml找关于Role的属性配置,lazy=false;重启服务就能获取Role的实例了。
    Role与Perimssions的关系是一对多
    在Role.hbm.xml中找到关于Permissions的配置,修改lazy=false即可。
    如果考虑性能,就用Hibernate.initialize(User.props);里面传入实例对象的属性即可