Hibernate多对多关系映射学习笔记
2011-12-06 10:09
483 查看
Student.java
packagecn.hai.domain; importjava.util.Set; publicclassStudent{ privateintid; privateStringname; privateSet<Teacher>teachers;//多对多关系一般有一个中间表用于相关联,Hibernate面向对象,更注重于对象关系 publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicSet<Teacher>getTeachers(){ returnteachers; } publicvoidsetTeachers(Set<Teacher>teachers){ this.teachers=teachers; } }
Teacher.jaca
packagecn.hai.domain; importjava.util.Set; publicclassTeacher{ privateintid; privateStringname; privateSet<Student>students; publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicSet<Student>getStudents(){ returnstudents; } publicvoidsetStudents(Set<Student>students){ this.students=students; } }
Student.hbm.xml
<?xmlversion="1.0"?> <!DOCTYPEhibernate-mappingPUBLIC "-//Hibernate/HibernateMappingDTD3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mappingpackage="cn.hai.domain"> <classname="Student"> <idname="id"> <generatorclass="native"/><!--主键,自增长--> </id> <propertyname="name"/> <!--声明中间表teacher_student,声明Teacher表主键teacher_id,声明多对多对应的表Student,声明多对多对应表的主键student_id--> <setname="teachers"table="teacher_student"> <keycolumn="student_id"/> <many-to-manyclass="Teacher"column="Teacher_id"/> </set> </class> </hibernate-mapping>
Teacher.hbm.xml
<?xmlversion="1.0"?> <!DOCTYPEhibernate-mappingPUBLIC "-//Hibernate/HibernateMappingDTD3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mappingpackage="cn.hai.domain"> <classname="Teacher"> <idname="id"> <generatorclass="native"/> </id> <propertyname="name"/> <setname="students"table="teacher_student"> <keycolumn="teacher_id"/> <many-to-manyclass="Student"column="student_id"/> </set> </class> </hibernate-mapping>
ManyToManyTest.java
packagecn.hai; importjava.util.HashSet; importjava.util.Set; importorg.hibernate.Session; importorg.hibernate.Transaction; importcn.hai.dao.HibernateUtil; importcn.hai.domain.Student; importcn.hai.domain.Teacher; publicclassManyToMany{ /** *@paramargs */ publicstaticvoidmain(String[]args){ Sessions=null; Transactiontx=null; try{ //建立关系 Set<Teacher>ts=newHashSet<Teacher>(); Teachert1=newTeacher(); t1.setName("XiangfGang1"); ts.add(t1); Teachert2=newTeacher(); t2.setName("ZhengHui1"); ts.add(t2); Teachert3=newTeacher(); t3.setName("WangJinFeng1"); ts.add(t3); Set<Student>ss=newHashSet<Student>(); Studentsd1=newStudent(); sd1.setName("ChengHai1"); ss.add(sd1); Studentsd2=newStudent(); sd2.setName("JiangKui1"); ss.add(sd2); Studentsd3=newStudent(); sd3.setName("YanJiaYang1"); ss.add(sd3); t1.setStudents(ss); t2.setStudents(ss); t3.setStudents(ss); //告诉学生有哪些老师,与上面告诉老师有哪些学生任选一种即可 //sd1.setTeachers(ts); //sd2.setTeachers(ts); //sd3.setTeachers(ts); s=HibernateUtil.getSession(); tx=s.beginTransaction(); s.save(t1); s.save(t2); s.save(t3); s.save(sd1); s.save(sd2); s.save(sd3); tx.commit(); }finally{ if(s!=null){ s.close(); } } }
//根据Teacher,id查学生的数量,左右连接查询导致效率低,少用 staticvoidquery(intid){ Sessions=null; Transactiontx=null; try{ s=HibernateUtil.getSession(); tx=s.beginTransaction(); Teachert=(Teacher)s.get(Teacher.class,id); System.out.println("students:"+t.getStudents().size()); //Hibernate.initialize(t.getStudents()); tx.commit(); }finally{ if(s!=null){ s.close(); } } }
mysql
相关文章推荐
- Hibernate学习笔记--第二篇 关联关系映射 many –to –one
- Hibernate 3.2 学习笔记 映射集合类
- Hibernate视频学习笔记(9)Hibernate继承映射
- hibernate学习笔记-2入门初体验关联映射
- Hibernate学习笔记(3)Hibernate映射文件之set key one-to-many
- Hibernate学习笔记 单表映射
- Hibernate学习笔记 多表映射
- Hibernate 学习笔记05 --对象关系映射
- 20,21,22-Hibernate容器映射技术(Set、List、Map) -mldn学习笔记 -hxzon
- Hibernate学习笔记:继承映射之每个子类一张表
- Hibernate 3.2 学习笔记 映射实体关联关系
- Hibernate视频学习笔记(10)其他映射
- 菜鸟学习Hibernate——多对多关系映射
- Hibernate学习笔记(七)【映射值类型集合】
- Hibernate 学习笔记07 --集合映射_&_继承映射
- [原创]java WEB学习笔记86:Hibernate学习之路-- -映射 n-n 关系,单向n-n,双向n-n
- Hibernate表单映射_学习笔记
- 【Hibernate学习笔记】映射继承关系
- 学习笔记之 O/R 映射技术的王牌Hibernate框架
- 【Hibernate学习笔记】映射一对一关联与多对多关联