Hibernate的一对多增改级联操作

本文介绍了一对多关系在Hibernate框架中的实现方法,包括学生与班级间的关联建立、查询及更新等操作。

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

建立两张表:student,grade。

创建语句:create table grade(id int(10) auto_increment primary key,gragename varchar(40));

               create table student(id int (10) auto_increment primary key,name varchar(40),password varchar(40),sex varchar(40),foregin key(id)  reference grade(id));

这个创建语句表明grade的主键id是student的外键id

之后的方法同上篇user的创建方法相同。

package dao;


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


import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;


import entity.Grade;
import entity.Student;


/**
 * 测试一对多
 * @author Administrator
 *
 */
public class TestRelation {
private static SessionFactory sessionFactory=null;
    private static Session session=null;
    Transaction transaction=null;

    static {
    try {
sessionFactory=new Configuration().configure().buildSessionFactory();

} catch (Exception e) {
// TODO: handle exception
}
    }
    public  static void saveGradeAndStudent(){
    Grade grade =new Grade();
    grade.setGradename("第三期");
    Student student=new Student();
   
    student.setName("zhangsan");
    student.setPassword("1345");
    student.setAge(12);
    //当grade.hbm.xml中inverse=true表明有学生维护班级的关联关系
    //grade-student-relation这张表,需要学生向该表插入数据
    student.setGrade(grade);
    //当grade.hbm.xml中inverse=false表明有班级维护学生关联关系,区别是多执行一个updata
    //grade.getStudents().add(student);
   
    session=sessionFactory.openSession();
    session.save(grade);
    session.save(student);
   
    session.beginTransaction().commit();
    session.close();
    }
    /**
            关联查询(级联查询)
            延迟加载机制(面试题)
    */
    public static void queryAllGradeAndStudent(){
    session =sessionFactory.openSession();
    List list =session.createQuery("from Grade").list();
    for(int i=0;i<list.size();i++){
    Grade grade=(Grade) list.get(i);
    Set studentset=grade.getStudents();
    System.out.println(studentset);
   
    }
    }
    /**
     * 删除机制(级联删除)
     * @param id
     */
    public static void deleteALLGradeAndStudent(Integer id){
    Session session=sessionFactory.openSession();
    Grade grade =(Grade) session.get(Grade.class, id);
    try {
    session.beginTransaction();
        session.delete(grade);
        session.getTransaction().commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
   
    session.close();}
    }
    public static void updateAllGradeAndStudent(){
    Session session=sessionFactory.openSession();
    //Grade grade =(Grade) session.get(Grade.class, id);
    //Set set=grade.getStudents();
    try {
session.beginTransaction();

Iterator student=(Iterator) session.createQuery("from Student").list().iterator();

while(student.hasNext()){
Student student2=(Student) student.next();
student2.setName(student2.getName()+1);
// Grade grade2=(Grade) grade.next();
// grade2.setId(grade2.getId()+1);
}

// grade.setId(11);
// grade.setGradename("测试");
//session.update(grade);
session.getTransaction().commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
session.close();
}
    }
    /**
* 根据名字级联更新
*/
public static void updateAllGrade1AndStudent1(Integer id){
session=sessionFactory.openSession();
Grade grade=(Grade) session.get(Grade.class, id);
session.beginTransaction();
//grade.setGradename("dai");
//grade1.setId(13);

Set studentSet=grade.getStudents();
Iterator iterStu=studentSet.iterator();
while(iterStu.hasNext()){
Student student=(Student) iterStu.next();
student.setAge(student.getAge()+8);
System.out.println(student);
session.getTransaction().commit();

}session.close();

}


    public static void main(String[] args) {
//saveGradeAndStudent();
//queryAllGradeAndStudent();
//deleteALLGradeAndStudent(new Integer(2));
updateAllGradeAndStudent();
//updateAllGrade1AndStudent1(7);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值