一对多/多对一双向关联

第一步:在数据库里建两张表,例如:一张表名是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=xx-small]
第三步:创建两个映射文件,分别对应两个表;
注意了:两个映射文件的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>第四步:把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());
}

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值