Hibernate学习笔记(三)

来源:互联网 发布:算法帝国 原版 编辑:程序博客网 时间:2024/06/05 16:57

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);

原创粉丝点击