现有用户(User)表,字段uid        角色表(role),字段rid            中间表(user_role),字段:uid,rid
相信大家一看就知道怎么回事了,现在我想在中间表中删除一条记录,要求控制台输出:
delete user_role where uid=? and rid =?
用户表中的配置
<set name="roles" table="USER_ROLE" cascade="save-update" lazy="false" inverse="false">
<key column="USER_ID"></key>
<many-to-many column="ROLE_ID" class="Role"/>
</set>
角色表中的配置
<set name="users" table="USER_ROLE" cascade="save-update" lazy="false" inverse="true">
<key column="ROLE_ID"></key>
<many-to-many column="USER_ID" class="Users"/>
</set>
测试时写的代码:
Users user = userservice.searchUsersByUid(7);
Role role = roleservice.searchByRid(1);
user.getRoles().remove(role);
comondao.add(user);
控制台输出了:
insert into USERS (USER_NAME, PASSWORD, HOME_NUMBER, EMAIL, ENABLED, DELETED) values (?, ?, ?, ?, ?, ?)
Hibernate: update ROLES set ROLE_NAME=?, DESCRIPTION=? where ROLE_ID=?
Hibernate: update USERS set USER_NAME=?, PASSWORD=?, HOME_NUMBER=?, EMAIL=?, ENABLED=?, DELETED=? where USER_ID=?
Hibernate: update ROLES set ROLE_NAME=?, DESCRIPTION=? where ROLE_ID=?
Hibernate: delete from USER_ROLE where USER_ID=?
Hibernate: insert into USER_ROLE (USER_ID, ROLE_ID) values (?, ?)
求大虾指点!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    Users user = userservice.searchUsersByUid(7);
    Role role = roleservice.searchByRid(1);
    user.getRoles().remove(role);
    ----------------------------------
    这里不能这么写吧?你查出来的user对象和role对象是没有任何关系的,他们的关系只在中间表存在,如果要操作这两张表,那么直接去中间表增删改查就行了。
    比如你现在要写一个删除,直接去中间表的dao写一个你最上面的SQL就OK了,有可能需要设置级联删除。
    因为中间表也是一张单独的表,从OO的角度来说他也没什么特殊的。