hibernate多对多关联单向实现实例



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

hibernate多对多单向关联

hibernate多对多单向关联

hibernate多读点但相关联实现步骤:

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

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

代码实现:

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

       }

    }

}