小狼一直分不清什么是一对多,今天专程看了一下,就用班级表和学生表,这两个表给大家做一下演示,先给大家展示一下Java部分的代码
package qh.zcy.OneToMany;
import java.util.Set;
import org.junit.Test;
import qh.ConstantUtil;
import qh.HibernateSessionFactory;
import qh.Log;
import qh.zcy.entity.Grade;
import qh.zcy.entity.Student;
public class TestOneToMany {
@Test
public void testOneToManySave(){
ConstantUtil.session=HibernateSessionFactory.getSessionFactory().openSession();
ConstantUtil.transaction=ConstantUtil.session.beginTransaction();
Student student1=new Student();
student1.setSex("boy");
student1.setSname("zhang");
Student student2=new Student();
student2.setSex("girl");
student2.setSname("lu");
Grade grade=new Grade();
grade.setGdesc("test");
grade.setGname("computer");
grade.getStudents().add(student2);
grade.getStudents().add(student1);
ConstantUtil.session.save(grade);
ConstantUtil.session.save(student1);
ConstantUtil.session.save(student2);
ConstantUtil.transaction.commit();
ConstantUtil.session.close();
}
@Test
public void testOneToManyFindById(){
ConstantUtil.session=HibernateSessionFactory.getSessionFactory().openSession();
Grade grade=(Grade)ConstantUtil.session.get(Grade.class, 1);
Set<Student>students=(Set<Student>) grade.getStudents();
for(Student student:students){
Log.getLog().info("sid="+student.getSid()+" sex="+student.getSex()+" sname="+student.getSname());
}
}
//添加一个新的班级,将一个现有的学生添加到班级中
@Test
public void testOneToManyUpdate1(){
ConstantUtil.session=HibernateSessionFactory.getSessionFactory().openSession();
ConstantUtil.transaction=ConstantUtil.session.beginTransaction();
Grade grade=new Grade();
grade.setGname("张大师");
grade.setGdesc("test");
grade.setGid(2);
Student student=(Student)ConstantUtil.session.get(Student.class, 2);
grade.getStudents().add(student);
ConstantUtil.session.save(grade);
ConstantUtil.transaction.commit();
ConstantUtil.session.close();
}
//添加一个新的学生,将添加的学生添加到已有的班级中
@Test
public void testOneToManyUpdate2(){
ConstantUtil.session=HibernateSessionFactory.getSessionFactory().openSession();
ConstantUtil.transaction=ConstantUtil.session.beginTransaction();
Grade grade=(Grade)ConstantUtil.session.get(Grade.class, 2);
Student student=new Student();
student.setSname("chouchou");
student.setSex("boy");
grade.getStudents().add(student);
ConstantUtil.session.save(grade);
ConstantUtil.session.save(student);
ConstantUtil.transaction.commit();
}
}
班级表的xml配置
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="qh.zcy.entity.Grade" table="tc_grade">
<id name="gid" type="int">
<generator class="increment"/>
</id>
<property name="gname" type="string"/>
<property name="gdesc" type="string"/>
<set name="students">
<key column="gid"></key>
<one-to-many class="qh.zcy.entity.Student"/>
</set>
</class>
</hibernate-mapping>
这里主要是班级表的xml配置
至于Javabean部分的代码,大家完全可以用hibernate的自动生成器配置
与其他的不同的就是grade.java 部分,加上这句话,并get/set
private Set students = new HashSet(0);