【SSH三个框架】Hibernate第八部分基础:经营-many关系
在Hibernate在-many關系。它通常不使用。由于當數據庫查詢復雜度太高時。
我們在這里做的是學生和教師,學生可以有多個老師,教師可以有多個學生。
我們首先建立一個學生實體類:Student.java
package cn.itcast.hibernate.domain;import java.util.Set;public class Student {private int id;private String name;private Set<Teacher> teachers;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Teacher> getTeachers() {return teachers;}public void setTeachers(Set<Teacher> teachers) {this.teachers = teachers;} } 我們定義了三個三個屬性。各自是id、name和一個set集合然后是老師實體類:Teacher.java
package cn.itcast.hibernate.domain;import java.util.Set;public class Teacher {private int id;private String name;private Set<Student> students;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;} } 我們仍然定義了三個實體類,id、name和一個set集合然后,我們看下Stduent類的映射文件:
<?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.itcast.hibernate.domain"> <class name="Student"> <id name="id"> <generator class="native"/> </id> <property name="name" /> <set name="teachers" table="teacher_student"><key column="student_id" /><many-to-many class="Teacher" column="teacher_id" /></set> </class> </hibernate-mapping> 在這個文件里。我們定義了:id自己主動增長、name屬性。另一個<set>標簽。name屬性是Student.java中的set集合的那個屬性。然后我們在<key>標簽定義外鍵是student_id,然后又定義了一個<many-to-many>標簽,規定了多對多的關系。下邊是Teacher.java類的映射文件:
<?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.itcast.hibernate.domain"> <class name="Teacher"> <id name="id"> <generator class="native"/> </id> <property name="name" /> <set name="students" table="teacher_student"> <key column="teacher_id" /> <many-to-many class="Student" column="student_id"/> </set> </class> </hibernate-mapping>
和上邊的Stduent類的映射文件差點兒相同然后,我們寫一個測試類:Many2Many.java
package cn.itcast.hibernate;import java.util.HashSet; import java.util.Set;import org.hibernate.Session; import org.hibernate.Transaction;import cn.itcast.hibernate.domain.Student; import cn.itcast.hibernate.domain.Teacher;public class Many2Many {public static void main(String[] args) {add();query(1);}static void add(){Session s = null;Transaction tx = null;try{//定義了一個Teahcer的set集合Set<Teacher> ts = new HashSet<Teacher>();//定義了一個Student的set集合Set<Student> ss = new HashSet<Student>();//添加一個老師1Teacher t1 = new Teacher();t1.setName("t1 name");ts.add(t1);//添加一個老師2Teacher t2 = new Teacher();t2.setName("t2 name");ts.add(t2);//添加一個學生1Student s1 = new Student();s1.setName("s1");ss.add(s1);//添加一個學生2Student s2 = new Student();s2.setName("s2");ss.add(s2);//這里是設置兩個teacher的set屬性t1.setStudents(ss);t2.setStudents(ss);/** 這是是設置兩個student的set屬性。假設和上邊的設置同一時候出現,則會拋出異常。由于多對多的關系在上邊已經建立* s1.setTeachers(ts);s2.setTeachers(ts);*/s = HibernateUtil.getSession();tx = s.beginTransaction();s.save(t1);s.save(t2);s.save(s1);s.save(s2);tx.commit();}finally{if(s!=null){s.close();}}}static void query(int id){Session s = null;Transaction tx = null;try{s = HibernateUtil.getSession();tx = s.beginTransaction();//依據id查詢得到Teacher對象Teacher t = (Teacher) s.get(Teacher.class, id);//把Teacher對象相應的學生的數量打出來System.out.println("Students:"+t.getStudents().size());tx.commit();}finally{if(s!=null){s.close();}}} }版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
轉載于:https://www.cnblogs.com/mengfanrong/p/4617153.html
總結
以上是生活随笔為你收集整理的【SSH三个框架】Hibernate第八部分基础:经营-many关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 约瑟夫问题的循环链表实现
- 下一篇: HBase原理解析(转)