Hibernate多对多操作
以用户和角色为例演示
第一步 创建实体类,用户和角色
第二步 让两个实体类之间互相表示
* 一个用户里面表示多个角色,用set集合
//一个用户有多个角色 private Set<Role>setRole = new HashSet<Role>(); public Set<Role> getSetRole() { return setRole; } public void setSetRole(Set<Role>setRole) { this.setRole =setRole; } |
* 一个角色有多个用户,用set集合
//一个角色有多个用户 private Set<User>setRole = new HashSet<User>(); public Set<User> getSetRole() { return setRole; } public void setSetRole(Set<User>setRole) { this.setRole =setRole; } |
第三步 配置映射关系
* 基本配置
* 配置多对多关系
在用户里面表示所有角色,使用set标签
<!-- 在用户里面表示所有角色,使用set标签 name属性:角色set集合名称 table属性:第三张表名称 --> <set name="setRole" table="User_Role"> <!-- key标签里面配置 配置当前映射文件在第三张表的外键名称 --> <key column="userid"></key> <!-- class里面写角色实体类全路径 column角色在第三张表的外键名称 --> <many-to-many class="com.hibernate.manytomany.Role" column="roleid"/> </set> |
在角色里面表示所有用户,使用set标签
<!-- 在角色里面表示所有用户,使用set标签 name属性:用户set集合名称 table属性:第三张表名称 --> <set name="setUser" table="User_Role"> <!-- key标签里面配置 配置当前映射文件在第三张表的外键名称 --> <key column="roleid"></key> <!-- class里面写用户实体类全路径 column用户在第三张表的外键名称 --> <many-to-many class="com.hibernate.manytomany.User" column="userid"/> </set> |
第四步 在核心配置文件中一如映射文件
<!-- 多对多 --> <mapping resource="com/hibernate/manytomany/User.hbm.xml"/> <mapping resource="com/hibernate/manytomany/Role.hbm.xml"/> |
多对多级联保存
根据用户保存角色
第一步 在用户配置文件中set标签进行配置,cascade值save-update
<set name="setRole" table="user_role" cascade="save-update"> |
第二步 写代码实现
创建用户和角色对象,把角色放到用户里面,最终保存用户就可以了
//添加两个用户,为这两个用户添加多个角色 //创建用户和角色对象 User user1 = new User(); user1.setUser_name("刘备"); user1.setUser_password("123"); User user2 = new User(); user2.setUser_name("曹操"); user2.setUser_password("456"); Role r1 = new Role(); r1.setRole_name("王者"); r1.setRole_password("234"); Role r2 = new Role(); r2.setRole_name("皇帝"); r2.setRole_password("567"); Role r3 = new Role(); r3.setRole_name("奸雄"); r3.setRole_password("890"); //建立关系,把角色放到用户里面 //u1---r1/r2 user1.getSetRole().add(r1); user1.getSetRole().add(r2); //u2---r2/r3 user2.getSetRole().add(r2); user2.getSetRole().add(r3); //保存用户 session.save(user1); session.save(user2); |
多对多级联删除(了解)
第一步 在set标签进行配置,cascade值delete
<setname="setRole" table="user_role" cascade="save-update,delet> |
第二步 删除用户
//查询ID然后删除 User user = session.get(User.class, 1); session.delete(user); |
维护第三张表
1用户和角色是多对多关系,通过第三张表来维护他们的关系
2让某个用户有某个角色
第一步 根据id查询出用户和角色
第二步 把角色放到用户里面(把角色对象放到用户set集合中)
//让某个用户有某个角色 //让刘备有奸雄这个角色 //查询刘备和奸雄 User user = session.get(User.class, 1); Role role = session.get(Role.class, 3); //把奸雄放到刘备的set集合里面去 user.getSetRole().add(role); |
3让某个用户没有某个角色
第一步 根据id查询出用户和角色
第二步 从用户里面把角色去掉(从set集合里面把角色移除)
//让某个用户没有某个角色 //让刘备没有奸雄这个角色 //查询刘备和奸雄 User user1 = session.get(User.class, 1); Role role1 = session.get(Role.class, 3); //把奸雄放到刘备的set集合里面去 user1.getSetRole().remove(role1); |