页面是这样,显示用户名,密码,组(链接),点击组链接,显示所有组,勾选所选的组,保存成功。数据库是这样设计的,用户表,组表,用户组表,其中用户表和用户组表是1-N(单向关联),即一个用户可以选择多个组。现在的问题是,为一个用户选一个或多个组,第一次保存成功,再次选择该用户所属的组(相当于级联更新还是更新不太清楚),则用户组表对应的记录不更新(数据库是把外键置为空),然后又新建一条对应的数据。保存到是成功了,但是之前的数据(外键为空的数据)还在,应该是更新它的,为什么没有更新呢?时间长了,该用户组表的数据会很大,如何解决?
User 表<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.LMS.user.action">
<class name="User" table="用户表">
<id name="userID" column="ID">
<generator class="identity"/>
</id>
<property name="username"/>
<property name="password"/>
<set name="usergroup" cascade="all" inverse="false">
<key column="userID"/>
<one-to-many class="UserGroup"/>
</set>
</class>
</hibernate-mapping>
用户组表<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.LMS.user.action">
<class name="UserGroup" table="用户组表">
<id name="ID" column="ID">
<generator class="identity"/>
</id>
<property name="UserGroupID" column="GroupID"/>
</class>
</hibernate-mapping>
java代码为public String saveusergroup(){

user = userService.getUser(this.getUserID());
Set<UserGroup> group = new HashSet<UserGroup>();
for(int i=0;i<groupIDS.length;i++){
UserGroup g1 = new UserGroup(Integer.valueOf(groupIDS[i]));
group.add(g1);
}
user.setUsergroup(group);
userGroupService.updateUser(user);
return SUCCESS;
}
所有的setter和getter方法都已提供,updateUser调用的是“this.getHibernateTemplate().saveOrUpdate(user);”请大家帮忙,

解决方案 »

  1.   

    这种方式我知道,为什么不能自动更新呢(例如:第一次选的是管理员组,在用户组表得到的组ID是1,用户ID是1,第二次我选为普通用户组,用户组表得到用户ID 是1,组ID 自动更新为2)这个意思,如果要先查询再删除,可定是可以的,不能级联更新,自动更新吗?
    user = userService.getUser(this.getUserID());
    在1-N(单向)我已经得到1端,应该可以级联更新吧??
      

  2.   

    把这里 
    <set name="usergroup" cascade="all" inverse="false">
    改为:
     <set name="usergroup" cascade="all-delete-orphan" inverse="false">
    再测试;