Hibernate入门BLOG[十、Hibernate对象关系多对多映射]

本文介绍了一个多对多关联关系的实现方法,通过Java类和Hibernate框架的XML映射文件展示了学生与教师之间的多对多关联关系,并提供了具体的插入示例。
多学生------多教师 1、 Java类文件:【省略set和get方法】 Student.java public class Student { private int id; private String name; private Set<Teacher> teas; } Teacher.java public class Teacher { private int id; private String name; private Set<Student> stus; } 2、 Xml映射文件: Student.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.hibernate.model"> <class name="Student" table="student"> <id name="id"> <generator class="native" /> </id> <property name="name" column="name"/> <!-- 对应的table是teacher_student --> <set name="teas" table="teacher_student"> <!-- 首先找到student_id --> <key column="student_id"></key> <!-- 然后找到teacher_id找到teacher --> <many-to-many class="Teacher" column="teacher_id"></many-to-many> </set> </class> </hibernate-mapping> Teacher.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.hibernate.model"> <class name="Teacher" table="teacher"> <id name="id"> <generator class="native" /> </id> <property name="name" column="name"/> <set name="stus" table="teacher_student"> <!-- 外键,老师表根据teacher_id --> <key column="teacher_id"></key> <!-- 设置匹配的多对多的关系和另一方的主键 --> <many-to-many class="Student" column="student_id"></many-to-many> </set> </class> </hibernate-mapping> 3、 插入自动生成表操作: //添加员工和IDcard的方法 static void AddTeacherAndStudent(){ Session s = null; Transaction tx = null; try{ Student stu = new Student(); Set<Teacher> ts = new HashSet<Teacher>(); Set<Student> ss = new HashSet<Student>(); s = HibernateUtil.getSession(); tx = s.beginTransaction(); Teacher t1 = new Teacher(); ts.add(t1); Teacher t2 = new Teacher(); ts.add(t2); Student s1 = new Student(); ss.add(s1); Student s2 = new Student(); ss.add(s2); //tea.setStus(sets); //stu.setTeas(sett); t1.setName("t1"); t2.setName("t2"); s1.setName("s1"); s2.setName("s2"); t1.setStus(ss); s.save(t1); s.save(t2); s.save(s1); s.save(s2); tx.commit(); }catch(HibernateException e){ //判断事务有没有完全提交的判断方式 if(tx != null){ tx.rollback(); throw e; } }finally{ if(s != null){ s.close(); } } }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值