4.一对多单向关联(班级对学生):测试

本文详细介绍了如何使用Hibernate框架实现Java对象之间的One-to-Many关系,包括实例化对象、设置关联关系及加载操作,并讨论了在操作过程中可能出现的异常及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.bjpowernode.hibernate;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.hibernate.Session;

import junit.framework.TestCase;

public class One2ManyTest extends TestCase {

	public void testSave1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			Student student1 = new Student();
			student1.setName("张三");
			
			Student student2 = new Student();
			student2.setName("李四");
			
			Classes classes = new Classes();
			classes.setName("动力节点");
			
			Set students = new HashSet();
			students.add(student1);
			students.add(student2);
			classes.setStudents(students);
			
			//抛出TransientObjectException
			//因为Student不是Persistent状态的对象,它是Transient状态的对象
			session.save(classes);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}
	
	public void testSave2() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			Student student1 = new Student();
			student1.setName("张三");
			session.save(student1);
			
			Student student2 = new Student();
			student2.setName("李四");
			session.save(student2);
			
			Classes classes = new Classes();
			classes.setName("动力节点");
			
			Set students = new HashSet();
			students.add(student1);
			students.add(student2);
			classes.setStudents(students);
			
			//可以成功保存数据
			//但是会发出多余的update语句来维持关系
			session.save(classes);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}	
	
	public void testLoad1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			Classes classes = (Classes)session.load(Classes.class, 2);
			System.out.println("classes.name=" + classes.getName());
			Set students = classes.getStudents();
			for (Iterator iter=students.iterator(); iter.hasNext();) {
				Student student = (Student)iter.next();
				System.out.println("student.name=" +student.getName());
			}
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}		
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值