多对多映射配置
1.创建两个实体类,用户和角色(一个用户有多个角色,你个角色可以属于多个用户)
2.在两个实体类之间相互表示
(1) 一个用户里面表示所有角色,使用set集合
private Set<Role> seRole = new HashSet<Role>();
(2)一个角色里面表示多个用户,使用set集合
private Set<User> setUser = new HashSet<User>();
3.配置多对多关系
(1)在用户中显示多个角色,使用set标签
<set name="setRole" table="user_role">
<!-- name属性:角色set集合名称 table属性:第三张表名称-->
<key column="userid"></key>
<!--key标签里面配置当前映射文件在第三张表外键名称-->
<many-to-many class="com.User" column="roleid"></many-to-one>
<!-- class属性:实体类全路径 column属性:角色表在第三张表中外键名称-->
</set>
(2)角色表表示所有用户,使用set标签
<set name="setUser" table="user_role">
<key column="roleid"></key>
<many-to-many class="com.User" column="userid"></many-to-many>
</set>
4.在核心配置文件中引入映射文件
<mapping resource="...User.hbm.xml">
<mapping resource="...Role.hbm.xml">
多对多级联保存
根据用户保存角色
1.在用户配置文件中set标签进行配置,cascade值设为save-update
<set name="setRole" table="user_role" cascade="save-update">
2.代码实现
建立关系,把角色放到XX用户里面 user1--r1/r2 user2--r2/r3
user1.getSetRole().add(r1);
user1.getSetRole().add(r2);
user2.getSetRole().add(r2);
user2.getSetRole().add(3);
session.save(user1);
session.save(user2);
多对多级联删除
1.在用户配置文件中set标签进行配置,cascade值设为delete
<set name="setRole" table="user_role" cascade="save-update,delete">
2.删除用户
User user = session.get(User.class,1);
session.delete(user);
维护第三张表
1.用户和角色多对多关系,维护关系通过第三张表维护
2.让某个用户有某个角色
第一步 先根据id查询用户和角色
User lucy = session.get(User.class,1);
Role role = session.get(Role.class,1);
第二步 把角色放入用户的set集合里面
lucy.getSetRole().add(role);
3.让某个用户没有某个角色
User lucy = session.get(User.class,1);
Role role = session.get(Role.class,1);
lucy.getSetRole().remove(role);