hibernate映射关系之一对多(一)

2014-11-24 01:42:34 · 作者: · 浏览: 0

一对多 单向

class类对应的映射文件


  
 

对应类:

\

一对多关系的各种情况

/**
	 * 保存学生这个操作只能插入一student对象,但是在student表中,外键任然为null
	 */
	@Test
	public void testSaveStudent(){
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		Student student = new Student();
		student.setSname(班长);
		student.setDescription(有班秘);
		session.save(student);
		transaction.commit();
		session.close();
	}
	
	/**
	 * 保存班级的时候同时保存学生
	 */
	@Test
	public void testSaveClassAndStudent(){
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		Student student = new Student();
		student.setSname(班秘);
		student.setDescription(女士优先);
		session.save(student);
		
		Classes classes = new Classes();
		classes.setCname(精品班);
		classes.setDescription(还是极品好);
		session.save(classes);
		transaction.commit();
		session.close();
	}
	/**
	 * 在保存班级的同时,级联保存学生
	 * 		Hibernate: select max(cid) from Classes
			Hibernate: select max(sid) from Student
			Hibernate: insert into Classes (cname, description, cid) values ( ,  ,  )
			Hibernate: insert into Student (sname, description, sid) values ( ,  ,  )
			Hibernate: update Student set cid=  where sid= 
	 */
	@Test
	public void testSaveClass_Cascade_Student(){
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		Student student = new Student();
		student.setSname(班秘);
		student.setDescription(女士优先);
		
		
		Set
  
    students = new HashSet
   
    (); students.add(student); Classes classes = new Classes(); classes.setCname(cc班); classes.setDescription(好); classes.setStudents(students); session.save(classes); transaction.commit(); session.close(); } /** * 保存班级的时候同时保存学生,并且建立班级和学生之间的关系 * 在classes.hbm.xml文件中 * 
    
      * inverse的值为默认或者false,才能让classes维护student的关系 */ @Test public void testSaveClassesAndStudent_R(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Student student = new Student(); student.setSname(班秘); student.setDescription(男女不限); Set
     
       students = new HashSet
      
       (); students.add(student); Classes classes = new Classes(); classes.setCname(aa班); classes.setDescription(好); classes.setStudents(students); session.save(classes); transaction.commit(); session.close(); } /** * 已经存在一个班级,新建一个学生,并且建立该学生和该班级之间的关系 * Hibernate: select classes0_.cid as cid0_0_, classes0_.cname as cname0_0_, classes0_.description as descript3_0_0_ from Classes classes0_ where classes0_.cid=  Hibernate: select students0_.cid as cid0_1_, students0_.sid as sid1_, students0_.sid as sid1_0_, students0_.sname as sname1_0_, students0_.description as descript3_1_0_ from Student students0_ where students0_.cid=  classes.getStudents()的时候发出的 Hibernate: select max(sid) from Student Hibernate: insert into Student (sname, description, sid) values ( ,  ,  ) Hibernate: update Student set cid=  where sid=  建立关系 */ @Test public void testSaveStudent_R(){ /** * 1、查询班级 * 2、新建学生 * 3、建立关系 */ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Student student = new Student(); student.setSname(习平); student.setDescription(昨天正式宣布); Classes classes = (Classes)session.get(Classes.class, 1L); //建立班级和学生之间的关系 classes.getStudents().a