Hibernate学习笔记5

 

Hibernate学习笔记5

学习课程:

多对多关联映射——单向

Hibernate_10_ManyToMany_1

多对多关联映射——双向

Hibernate_09_ManyToMany_2

学习内容:

多对多关联映射

单向对象模型(User---->Role):

映射文件User.hbm.xml:

 

  1. <class name="User" table="t_users">
  2. <id name="id" column="name_id">
  3. <generator class="native" />
  4. </id>
  5. <property name="name" />
  6. <!-- 建立出一张新表用来存放User和Role的关系
  7. user_id 和 role_id 通过外键映射成为复合主键-->
  8. <set name="roles" table="t_user_role"><!--对方-->
  9. <key column="user_id" /><!--本身-->
  10. <many-to-many class="Role" column="role_id"/>
  11. <!--对方-->
  12. </set>
  13. </class>

 

映射文件Role.hbm.xml都是普通属性,内容简单不予给出。

双向对象模型:

映射文件Role.hbm.xml

  1. <class name="Role" table="t_roles">
  2. <id name="id" column="name_id">
  3. <generator class="native" />
  4. </id>
  5. <property name="name" />
  6. <set name="users" table="t_user_role"><!--对方-->
  7. <key column="role_id"/><!--本身-->
  8. <many-to-many class="User" column="user_id" />
  9. <!--对方-->
  10. </set>
  11. </class>

只修改Role.hbm.xml映射文件即可

注:

table 属性值必须和单向关联中的table属性值一致

<key>中column属性值要与单向关联中的<many-to-many>标签中的column属性值一致

在<many-to-many>中的column属性值要与单向关联中<key>标签的column属性值一致

进行测试的方法,以及主要源代码:

testSave1()

向数据库中写入数据

方向:

User---->Role

  1. Role r1 = new Role();
  2. r1.setName("网站构建人员");
  3. …………
  4. session.save(r1);
  5. session.save(r2);
  6. session.save(r3);
  7. User u1 = new User();
  8. u1.setName("何萍");
  9. Set<Role> u1Role = new HashSet<Role>();
  10. u1Role.add(r1);
  11. u1Role.add(r2);
  12. u1.setRoles(u1Role);
  13. …………
  14. session.save(u1);
  15. session.save(u2);
  16. session.save(u3);

testSave2()

向数据库中写入数据

方向:

Role---->User

  1. User u1 = new User();
  2. u1.setName( "桂卫华" );
  3. …………
  4. session.save( u1 );
  5. session.save( u2 );
  6. session.save( u3 );
  7. Role r1 = new Role();
  8. r1.setName( "软件策划人员" );
  9. Set<User> r1User = new HashSet<User>();
  10. r1User.add( u1 );
  11. r1User.add( u2 );
  12. r1.setUsers( r1User );
  13. …………
  14. session.save( r1 );
  15. session.save( r2 );
  16. session.save( r3 );

 

testLoad1()

加载数据

方向
User---->Role

  1. User u2 = (User)session.get( User.class ,  1 );
  2. System.out.println("u2.name: " +
  3.  u2.getName());
  4. Set<Role> u2Role = u2.getRoles();
  5. for (Role r : u2Role) { System.out.println("u2.role: " +
  6.  r.getName());
  7. }

testLoad2()

加载数据

方向:

Role---->User

  1. Role r1 =(Role) session.get( Role.class , 1 );
  2. System.out.println( "r1.name: " +
  3.  r1.getName() );
  4. Set<User> r1User = r1.getUsers();
  5. for( User u : r1User ){ 
  6.  System.out.println( "r1.user.name: " + u.getName() );
  7. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值