力所能及之hibernate一对多

小狼一直分不清什么是一对多,今天专程看了一下,就用班级表和学生表,这两个表给大家做一下演示,先给大家展示一下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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值