Hibernate一对多关联操作

步骤:

(1)在数据库testdb6中创建学生表student( Integer id, Varchar sname, Integer cid ),班级表class1( Integer id, Varchar cname ),同时在数据库中将student表的外键cidclass1表的主键id进行关联。

创建的过程可以参照这篇文章,http://blog.csdn.net/m_eve/article/details/70850546

Class1

 

Student

 

然后点击外键,如下图

 

(2)MyEclipse中创建与数据库testdb6的连接,创建一个Java项目工程chap,为工程添加Hibernate支持

(3)MyEclipseDB Browser窗格中利用Hivernate反向工程(Hibernate Reverse Engineering)生成class表和student表的映射文件及POJO类。

这几步直接参考这篇文章,http://blog.csdn.net/m_eve/article/details/70850546

(4)Java项目中创建一个测试类Test.java,并完成以下操作。

1)class表中添加“101”和“102”两个班级

2)student表中添加4个学生,包括“101”班的“李逵”和“林冲”,“102”班的“孙权”和“周瑜”。

(1)testz.java

package com.entity;

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

import org.hibernate.Session;
import a006.HibernateSessionFactory;

public class testz {
	Session s1 = HibernateSessionFactory.getSession();
	
	public Class1 getClass(int id){
		 Session s1 = HibernateSessionFactory.getSession();
		 Class1 dep = (Class1)s1.get(Class1.class, id);
		 s1.close();
		 return dep;
	}
	public void ins(){}   //插入班级
	public void ins(String cname1){

		Class1 dep1 = new Class1();			
		dep1.setCname(cname1);    //班级
		s1.save(dep1);
	}
	public void inss(){}  //插入学生
	public void ins(String sname,Class1 dep1){		
			Student stu1 = new Student();
			stu1.setSname(sname);
			stu1.setClass1(dep1);
			s1.save(stu1);
	}
	
	public void del(){}  //删除学生
	public void del(int id){
		
		Student stu5 = (Student)s1.get(Student.class, id);//学生ID
		s1.delete(stu5);
	}
	
	public void que(){}   //查询某一个班级的学生
	public void que(int cid){
			
		Class1 dep = (Class1)s1.get(Class1.class, cid);
		Set students = dep.getStudents();
		Iterator it = students.iterator();

		while(it.hasNext()){  //查询
			Student stu = (Student)it.next();
			System.out.println(stu.getSname());
		}

	}
	
	public void up(){}  //某一学生转班
	public void up(int sid,int cid){//学生id,班级id
		
		Student stu1 = (Student)s1.get(Student.class, sid);//学生ID
		Class1 dep1 = (Class1)s1.get(Class1.class, cid);   //转班
		stu1.setClass1(dep1);
	}
}

(2)test.java,每次执行时调用一个方法,将其它方法注释即可
package com.entity;

import org.hibernate.Session;
import org.hibernate.Transaction;

import a006.HibernateSessionFactory;

public class test {
	public static void main(String[] args) {
		Session s1 = HibernateSessionFactory.getSession();
		Transaction tx = null;
			tx = s1.beginTransaction();
			
//			insert a = new insert();    //插入班级
//			a.ins("101");
//			
//			Class1 dep1 = (Class1)s1.get(Class1.class,1); //插入学生
//			testz b = new testz();  
//			b.ins("林冲",dep1);
//			
//			testz c = new testz();  //删除学生
//			c.del(6);
			
			testz d = new testz();
			d.up(2, 1);             //将id为2的学生转到id为1的班级
			
//			testz e = new testz();
//			e.que(1);              //查询id为1的班级的学生
			tx.commit();
	}
}

最后注意一下,如果你发现没有办法添加中文字符,那么可以参考这篇文章,http://blog.csdn.net/M_Eve/article/details/70763481

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值