1. 程式人生 > >一對多/多對一雙向關聯

一對多/多對一雙向關聯

第一步:在資料庫裡建兩張表,例如:一張表名是CLASS 有STUDENTCLASSID,STUDENTCLASSNAME,另一張表名是STUDENT 有 STUDENTID,STUDENTCLASSID,STUDENTNAME,
第二步:建立兩個PO物件,Class ,Student.
package po;

import java.util.Set;

public class Class {
private int studentclassid;
private String studentclassname;
private Set student;
public Set getStudent() {
return student;
}
public void setStudent(Set student) {
this.student = student;
}
public int getStudentclassid() {
return studentclassid;
}
public void setStudentclassid(int studentclassid) {
this.studentclassid = studentclassid;
}
public String getStudentclassname() {
return studentclassname;
}
public void setStudentclassname(String studentclassname) {
this.studentclassname = studentclassname;
}
}


package po;

public class Student {
private int studentid;
private String studentname;
private int studentclassid;
private Class clases;
public int getStudentclassid() {
return studentclassid;
}
public void setStudentclassid(int studentclassid) {
this.studentclassid = studentclassid;
}
public int getStudentid() {
return studentid;
}
public void setStudentid(int studentid) {
this.studentid = studentid;
}
public String getStudentname() {
return studentname;
}
public void setStudentname(String studentname) {
this.studentname = studentname;
}
public Class getClases() {
return clases;
}
public void setClases(Class clases) {
this.clases = clases;
}
}

[size=large][size=xx-small][color=black]
第三步:建立兩個對映檔案,分別對應兩個表;
注意了:兩個對映檔案的Set屬性,和Class屬性 之間也有關聯;
通過兩個表間共有的東西去關聯的!即STUDENTCLASSID
<set name="student" inverse="true" >
<key>
<column name="STUDENTCLASSID"></column>
</key>
<one-to-many class="po.Student" />
</set>
<many-to-one name="clases" class="po.Class" fetch="select"
insert="false" update="false">
<column name="STUDENTCLASSID"></column>
</many-to-one>[/color][/size]第四步:把Class.hbm.xml 和 Student.hbm.xml 加入到hibernate-cfg.xml檔案中<mapping resource="po/Class.hbm.xml"></mapping>
<mapping resource="po/Student.hbm.xml"></mapping>[/size]第五步:測試學生的班級的名稱和某個班級的學生分別是誰?
首相import po.Student ,Student stu=(Student)get (Student.class,new Integer(1));
System.out.println(student.getClases().getStudentclassname());先得到學生的班級屬性,然後班級屬性還有班級名稱屬性;


獲得班級的學生人數屬性
通過Set.iterator()把Set裡的內容全部迭代出來返回值是Student型別的,
Class clases=(Class) session.get(Class.class, new Integer(3));
Set set =clases.getStudent();
Iterator it= set.iterator();
while (it.hasNext()){
Student stu=(Student)it.next();
System.out.println(stu.getStudentname());
}
原始碼:import java.util.Iterator;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;

import po.Student;
import po.Class;
public class Test {


public static void main(String[] args) {
HibernateTools tool = new HibernateTools();
Session session = tool.getSession();
Transaction traa = session.beginTransaction();
traa.begin();
Student student = (Student) session.get(Student.class, new Integer(1));
System.out.println(student.getClases().getStudentclassname());
Class clases=(Class) session.get(Class.class, new Integer(3));
Set set =clases.getStudent();
Iterator it= set.iterator();
while (it.hasNext()){
Student stu=(Student)it.next();
System.out.println(stu.getStudentname());
}

}
}