多对多更新 不能删除关联表信息

ycyu09 2009-07-30 09:40:07
多对多更新 不能删除关联表信息
角色更新时不能删除旧角色 添加新角色时会把新角色保存进去;


action 部分代码 user为从数据库取出的瞬时对象

user.getErsUserRoles().remove(user.getErsUserRoles());
System.out.println(user.getErsUserRoles().size()+"================>权限 =======>");
String []role=request.getParameterValues("role");
Set ersUserRole= new HashSet();
for(int i=0;i<role.length;i++){
ErsUserRole ur=new ErsUserRole();
ErsUserRoleId urid = new ErsUserRoleId();
ErsRole roles = new ErsRole();
roles.setId(Integer.parseInt(role[i]));
urid.setErsRole(roles);
urid.setErsUser(user);
ur.setId(urid);
ersUserRole.add(ur);

}
user.setErsUserRoles(ersUserRole);
System.out.println(user.getErsUserRoles().size()+"=====>"


DAO 部分代码

public boolean updateObj(Object obj) {
try{
this.getHibernateTemplate().update(obj);
}catch(Exception ex){
return false;
}
return true;
}


配置文件
ersUser

<set name="ersUserRoles" lazy="false" inverse="false" cascade="all-delete-orphan">
<key>
<column name="userid" not-null="true" />
</key>
<one-to-many class="com.zmht.ers.core.po.ErsUserRole" />
</set>



ersUserRole

<key-many-to-one name="ersUser" class="com.zmht.ers.core.po.ErsUser" foreign-key="userid" lazy="false">
<column name="userid" />
</key-many-to-one>
<key-many-to-one name="ersRole" class="com.zmht.ers.core.po.ErsRole" foreign-key="roleid" lazy="false">
<column name="roleid" />
</key-many-to-one>


ersRole 文件

<set name="ersUserRoles" lazy="false" cascade="save-update">
<key>
<column name="roleid" not-null="true" />
</key>
<one-to-many class="com.zmht.ers.core.po.ErsUserRole" />
</set>


原本角色四个 ,更新后数据库为还有四个关联关系 如果更新的角色中有以前未有的角色会更新进去
上面输出语句 0==============>权限 =======>
2=====>

输出一条update语句 三条查询语句
请大家指教


...全文
231 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycyu09 2009-08-07
  • 打赏
  • 举报
回复
郁闷的帖子
zhang_yu_QIN 2009-08-06
  • 打赏
  • 举报
回复
现在的问题是什么阿??
ycyu09 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 guodong66 的回复:]
楼主生成表的时候是不是关系没有正确加入啊,之后发现错误又修改了配置文件,结果配置文件正确的,但是表间关系不正确。
[/Quote]
的确有个表间的关系不正确 不过那是角色与权限的关联表,当时不知道为什么ErsRoleRight表不能输入数据,让测试员研究一下 谁知道她把角色跟权限的外键关联给删了,也没跟打框架的人说,以至于我上来做权限搞了一两天没搞出来。一来没处理过这样的关系,二来表配置文件有毛病,前阶段已经发帖请过教了,后来才发现表关联给删了,问题解决了。现在又遇这个问题,这个项目的开头一点都不顺啊 ,还刚进公司所以心里还特别急。上个星期除了睡觉就没闲过。 这次应该不是表关联错误,我查过了。估计是hibernate配置问题,hibernate我还不太熟。
这次我通过角色得到ErsUserRole 集合 然后遍历 在遍历中 删除ErsUserRole这个关联实体 ,任务算了马马虎虎做完了,但是这等于是糊弄人,找到方法后最好还是改回来。
guodong66 2009-08-04
  • 打赏
  • 举报
回复
楼主生成表的时候是不是关系没有正确加入啊,之后发现错误又修改了配置文件,结果配置文件正确的,但是表间关系不正确。
iskyshop 2009-08-03
  • 打赏
  • 举报
回复
多对多的处理,建议不要依赖关联,手动更新
比如:
Class User(){
@ManyToMany
List<Role> roles
}


Class Role(){
@ManyToMany
List<User> users;
}

处理的时候如下:

List<Role> roles=user.getRoles();
for(Role r:roles){
...//这里手动处理
}
ycyu09 2009-08-03
  • 打赏
  • 举报
回复
继续顶 ,等高手指教
ycyu09 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 peng_guan 的回复:]
多对多是这样写的吗?我还是第一次看到!
我的认识是这样的
就拿A,B两个表来说吧,它们需要建一个C中间表与A,B表相映射,A,B表没有任何关联。
A
AID --------Name
B
BID --------bname
C
aID ---bID
不知道是我错了还是你错了。
[/Quote]
一个多对多可以拆成两个多对一来处理 ,这是搭框架时 hibernate自动生成的,框架别人做的,我以前也没这么做过。
阿士匹灵 2009-08-02
  • 打赏
  • 举报
回复
帮顶了
peng_guan 2009-08-02
  • 打赏
  • 举报
回复
多对多是这样写的吗?我还是第一次看到!
我的认识是这样的
就拿A,B两个表来说吧,它们需要建一个C中间表与A,B表相映射,A,B表没有任何关联。
A
AID --------Name
B
BID --------bname
C
aID ---bID
不知道是我错了还是你错了。
ycyu09 2009-08-02
  • 打赏
  • 举报
回复
自己给解决了 在遍历中遍历一次删除一次关联边,这样做肯定不行。求个思路以后好用啊~!
ycyu09 2009-08-02
  • 打赏
  • 举报
回复
CSDN真让人失望
ycyu09 2009-07-31
  • 打赏
  • 举报
回复
帖子要沉了 没人有这方面的经验吗?
supreme1008 2009-07-30
  • 打赏
  • 举报
回复
说真的,一般现在都不是用多对多关联的,都是分表操作的,所以这个有点麻烦,具体我还没有用过多对多~~
zl3450341 2009-07-30
  • 打赏
  • 举报
回复
多对多 有点麻烦啊

关注
goosen 2009-07-30
  • 打赏
  • 举报
回复
帮顶
ycyu09 2009-07-30
  • 打赏
  • 举报
回复
<set name="ersUserRoles" lazy="false" inverse="false" cascade="all-delete-orphan">
这个地方cascade="all-delete-orphan"> 换了N多值 这是最后一次的。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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