hibernate映射many-to-many

多对多(teacher - student)

在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型;hibernate会为我们创建中间关联表,转换成两个一对多。

<set name="teacher" table="teacher_student">

<key column="teacher_id"/>

<many-to-many class="Student" column="student_id"/>

</set>


teacher

  1. private int id;  
  2. private String name;  
  3. private Set<Student> student;  

student
  1. private int id;  
  2. private String name;  
  3. private Set<Teacher> teacher;  
Teacher.hbm.xml映射文件
  1. <hibernate-mapping>  
  2.   
  3.     <class name="com.huawei.domain.Teacher">  
  4.         <id name="id" type="java.lang.Integer">  
  5.             <column name="id" />  
  6.             <generator class="native" />  
  7.         </id>  
  8.           
  9.         <property name="name" type="java.lang.String">  
  10.             <column name="name" length="5" not-null="false" />  
  11.         </property>  
  12.           
  13.         <set name="student" table="teacher_student">  
  14.             <key column="teacher_id"></key>  
  15.             <many-to-many class="com.huawei.domain.Student" column="student_id"></many-to-many>  
  16.         </set>  
  17.     </class>  
  18. </hibernate-mapping>  
Student.hbm.xml映射文件
  1. <hibernate-mapping>  
  2.   
  3.     <class name="com.huawei.domain.Student">  
  4.         <id name="id" type="java.lang.Integer">  
  5.             <column name="id" />  
  6.             <generator class="native" />  
  7.         </id>  
  8.           
  9.         <property name="name" type="java.lang.String">  
  10.             <column name="name" length="5" not-null="false" />  
  11.         </property>  
  12.           
  13.         <set name="teacher" table="teacher_student">  
  14.             <key column="student_id"></key>  
  15.             <many-to-many class="com.huawei.domain.Teacher" column="teacher_id"></many-to-many>  
  16.         </set>  
  17.     </class>  
  18. </hibernate-mapping>  

测试:
  1. Session s = null;  
  2. Transaction tx = null;  
  3. try {  
  4.     s = HibernateSessionFactory.getSession();  
  5.     tx = s.beginTransaction();  
  6.       
  7.     Set<Teacher> tt = new HashSet<Teacher>();  
  8.     Teacher t1 = new Teacher();  
  9.     t1.setName("t1");  
  10.     tt.add(t1);  
  11.       
  12.     Teacher t2 = new Teacher();  
  13.     t2.setName("t2");  
  14.     tt.add(t2);  
  15.       
  16.     Set<Student> ss = new HashSet<Student>();  
  17.     Student s1 = new Student();  
  18.     s1.setName("s1");  
  19.     ss.add(s1);  
  20.       
  21.     Student s2 = new Student();  
  22.     s2.setName("s2");  
  23.     ss.add(s2);  
  24.       
  25.     t1.setStudent(ss);  
  26.     t2.setStudent(ss);  
  27.       
  28.     s.save(t1);  
  29.     s.save(t2);  
  30.     s.save(s1);  
  31.     s.save(s2);  
  32.     tx.commit();  
  33. catch (HibernateException e) {  
  34.     e.printStackTrace();  
  35. }finally{  
  36.     if(s != null){  
  37.         HibernateSessionFactory.closeSession();  
  38.     }  
  39. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值