解决方案 »
- Hibernate annotation 多对多 JDO的问题~谢谢指导
- ireport导出excel
- [请教]关于EJB和session的问题
- jsp点击删除后防止二次点击
- 想用java做一个视频聊天室,大家能不能给点意见..
- 用消息驱动BEAN能监听一个端口吗?
- 请大家帮我看看这段代码有什么问题,谢谢了
- 招募斑竹
- 急急急,在用JAR命令生成.jar文件后,使用该.jar文件出现java.lang.SecurityException错误
- spring cglib使用
- 单例模式之内部类延迟加载问题
- hibernate3懒加载问题求帮助。com.sun.jdi.InvocationException occurred invoking method.
ps是什么,我还不知道。我是在业务层加的事务么,当然按道理userService.findById(u.getUsid())得到User后事务完成,session就关闭了已经。主要是我看别人这么写的是可以的,不知道是不是配置了什么东西,可能是配置了些什么呢?
还有你这个usr是怎么来的
查出来的?
在传进来之前又role吗?
user是查出来的啊,在上面的方法中已经写了,传进来的时候应该没有吧,现在就是想着它能够再次打开session去查一下关联的role对象!
这个长session怎么用呢?我好像听过,但一直不知道怎么用啊,可能这就是我想要的东西吧!
这就是个函数调用,查出user后直接把它传给了获取权限的函数,我打断点了,role中好像是有值的,但是是这样的:这个不为null,看似有值,但是其内的值全是为null的,应该也是没有真实的拿到它所关联的那个对象吧;像是个代理???
这个usr查出来后直接就给了下面那个函数,没有往页面传啊;打断点后看到的是这个:值好像是不为null,但其内的属性怎么都是null呢,不对劲啊;是个代理????
这个usr查出来后直接就给了下面那个函数,没有往页面传啊;打断点后看到的是这个:值好像是不为null,但其内的属性怎么都是null呢,不对劲啊;是个代理????
你是用了延迟加载吧 如果是在页面上的话 可以用opensessionview试试 不然你就不要设置延迟加载也好 实在要用延迟加载 在查出user的时候 返回user出来的时候 用user.role.name这种方式让user再去拿出role再返回出来也可以
那个role的代理对象是因为我对它采用延迟加载,所以hibernate用一个代理类来存储它的信息(只有id值);如若我再要role的其他属性值,hibernate就会去发送sql语句把它的所有内容全部加载进来,现在由于采用userService.findById()来得到user对象,且userService上加有事务,所以查完user之后,事务就关闭了(对于事务与session的关系一直不清楚,可能是事务一关闭,session就关闭了吧),所以再次请求role的其他信息时就出现了no session的错误;现在最主要的是我是照着一个大项目的此部分写的啊,它就是这么写的,而且它的取user的方法上也加有事务,人家是可以顺利在最后取到permissio的,我就是想不通了,他是怎么把它弄好的,是有什么配置项吗?看看您知道不知道怎么达到这个效果啊!
就去找User.hbm.xml找关于Role的属性配置,lazy=false;重启服务就能获取Role的实例了。
Role与Perimssions的关系是一对多
在Role.hbm.xml中找到关于Permissions的配置,修改lazy=false即可。
如果考虑性能,就用Hibernate.initialize(User.props);里面传入实例对象的属性即可