Hibernate学习15 -- 关联映射5 -- 多对多关联1 -- 多对多关联单向

本文介绍Hibernate框架中如何实现多对多关联映射,包括创建User与Role类、配置hibernate映射文件及测试保存与加载功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般的设计中,多对多关联映射,需要一个中间表,Hibernate会自动生成中间表,Hibernate使用many-to-many标签来表示多对多的关联。多对多的关联映射,在实体类中,跟一对多一样,也是用集合来表示的。

clip_image002

步骤:

n         建立POJO:User.javaRole.java,建立hibernate的配置文件,将两个hbm文件与其绑定

n         User.java里面建立一个Set类型的属性,准备Role对象

n         代码实现:

User.java

public class User {

    private int id;

    private String name;

    private Set roles;

Role.java

public class Role {

    private int id;

    private String name;

User.hbm.xml

<hibernate-mapping>

    <class name="User" table="t_user">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name"/>

       <set name="roles" table="t_user_role">

           <key column="userid"/>

           <many-to-many class="Role" column="roleid"/>

       </set>

    </class>

</hibernate-mapping>

Role.hbm.xml

<hibernate-mapping>

    <class name="Role" table="t_role">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name"/>

    </class>

</hibernate-mapping>

测试类:

public class Many2Many extends TestCase {

    public void testSave() {

       Session session = null;

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();       

           Role r1 = new Role();

           r1.setName("数据录入人员");

           session.save(r1);       

           Role r2 = new Role();

           r2.setName("商务主管");

           session.save(r2);       

           Role r3 = new Role();

           r3.setName("大区经理");

           session.save(r3);       

           User u1 = new User();

           u1.setName("张三");

           Set u1Roles = new HashSet();

           u1Roles.add(r1);

           u1Roles.add(r2);

           u1.setRoles(u1Roles);          

           User u2 = new User();

           u2.setName("李四");

           Set u2Roles = new HashSet();

           u2Roles.add(r2);

           u2Roles.add(r3);

           u2.setRoles(u2Roles);          

           User u3 = new User();

           u3.setName("王五");

           Set u3Roles = new HashSet();

           u3Roles.add(r1);

           u3Roles.add(r2);

           u3Roles.add(r3);

           u3.setRoles(u3Roles);          

           session.save(u1);

           session.save(u2);

           session.save(u3);       

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }     

   

    public void testLoad() {

       Session session = null;

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();

           User user = (User)session.load(User.class, 1);

           System.out.println(user.getName());

           for (Iterator iter=user.getRoles().iterator();

 iter.hasNext();) {

              Role role = (Role)iter.next();

              System.out.println(role.getName());

           }

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }     

   

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值