hibernate多对多关联下的failed to lazily initialize a collection of role

snowymo 2010-12-27 05:58:04
RT
我采用的是基于annotation的ssh2框架
用MySQL创建好表之后逆向工程用hibernate生成了entity类和dao类
其中有user表与follow表 follow表达了user与user之间的多对多关联

在我的网页中 需要user A 关注(follow)user B
而hibernate生成的类中没有follow类 而是在user类中有两个set 分别表示follow与被follow

每次在按下按钮 执行给user中的某个set增加一项 的操作时 都会被告知failed to lazily initialize a collection of role

自己查了些情况
有说强制把lazy属性修改的(已尝试 他的问题稍后描述)
有说强行启动session 例如hibernate.initial();的语句
但是由于我是用Spring管理hibernate 于是我只有applicationContext.xml这个配置文件 没有hibernate.cfg.xml这个配置文件 关于启动session 或者sessionfactory估计都不能用与hibernate.cfg.xml相关的方法来操作 尝试无果

另 在退而求其次的使用了改lazy属性之后
遇到的问题就是如何使用dao类来进行修改一个实例
save表示增加 delete表示修改 merge和attach等并不很清楚他们的作用
我需要做的事findby得到这个实例 然后对他的某属性(类型是set)进行add操作 然后把该实例返回到数据库中 但是我直接save会被表示已存在相同pk的值 delete后save依然失败 修改save函数使save()的语句变为saveorupdate(0也没有用 尝试了一下merge等 也是报出奇怪的错误

特此相求 希望有答
...全文
263 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowymo 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hf2905330 的回复:]
多对多,多对一,的lazy属性一律弄为false.其他错误你再贴出来看看
[/Quote]
我是基于annotation的 你说的一律弄为FALSE和这个是一个意思么?
===修改前===
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usersForUserId")
===修改后===
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "usersForUserId")
HF2905330 2010-12-27
  • 打赏
  • 举报
回复
多对多,多对一,的lazy属性一律弄为false.其他错误你再贴出来看看

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧