• hibernate-cascade级联关系


    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="entity.Project" table="PROJECT" schema="RENT">
            <id name="proid" type="java.lang.Integer">
                <column name="PROID" precision="6" scale="0" />
                <generator class="assigned" />
            </id>
            <property name="proname" type="java.lang.String">
                <column name="PRONAME" length="100" not-null="true" />
            </property>
            <set name="employees" table="PROEMP" schema="RENT" cascade="save-update">
                <key>
                    <column name="RPROID" precision="6" scale="0" not-null="true" />
                </key>
                <many-to-many entity-name="entity.Employee">
                    <column name="REMPID" precision="6" scale="0" not-null="true" />
                </many-to-many>
            </set>
        </class>
    </hibernate-mapping>
    package Test;
    
    import static org.junit.Assert.*;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    import entity.Employee;
    import entity.Project;
    
    import util.HibernateSessionFactory;
    
    public class Test5 {
    
        //多对多
        @SuppressWarnings("unchecked")
        @Test
        public void test1() {
            //一定要在配置中加级联保存的配置cascade="save-update"
            Session session = HibernateSessionFactory.getSession();
            Transaction tx=session.beginTransaction();
            try {
                Employee employee1 = new Employee(4, "duhe");
                Employee employee2 = new Employee(5, "赵六");
    
                Project project1 = new Project(4, "4号项目");
                Project project2 = new Project(5, "5号项目");
                //创建关联关系
                project1.getEmployees().add(employee1);
                project1.getEmployees().add(employee2);
                
                employee1.getProjects().add(project1);
                employee2.getProjects().add(project1);
    
                project2.getEmployees().add(employee1);
                
                employee1.getProjects().add(project2);
                
                session.save(project1);
                session.save(project2);
                
                
                tx.commit();
                System.out.println("新增成功");
            } catch (Exception e) {
                e.printStackTrace();
                tx.rollback();
                System.out.println("新增失败");
            }finally{
                session.close();
            }
        }
    
    }
    package Test;
    
    
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Set;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    import entity.Dept;
    import entity.Emp;
    
    import util.HibernateSessionFactory;
    
    public class Test33 {
    
        // 级联增加
        @Test
        public void test1() {
            Session session = HibernateSessionFactory.getSession();
            Transaction tx=session.beginTransaction();
            try {
                //创建部门
                Dept dept=new Dept();
                dept.setDeptno(50);
                dept.setDname("行政部");
                dept.setLoc("china");
                
                //创建员工
                Emp emp1=new Emp();
                emp1.setEmpno((short)8001);
                emp1.setEname("liujuan");
                emp1.setJob("吃饭");
                emp1.setSal(9000D);
                Emp emp2=new Emp();
                emp2.setEmpno((short)8002);
                emp2.setEname("duheyu");
                emp2.setJob("睡觉");
                emp2.setSal(1000D);
                
                //创建员工与部门关联关系
                Set<Emp> emps=new HashSet<Emp>();
                emps.add(emp1);
                emps.add(emp2);
                dept.setEmps(emps);
                emp1.setDept(dept);
                emp2.setDept(dept);
                
                //增加部门
                session.save(dept);
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            }
            
        }
    
        // 级联删除
        @Test
        public void test2() {
            Session session = HibernateSessionFactory.getSession();
            Transaction tx=session.beginTransaction();
            try {
                /*Dept dept=new Dept();
                dept.setDeptno(50);*/
                
                //删除一个持久化对象
                Dept dept=(Dept) session.get(Dept.class, 50);
                session.delete(dept);
                tx.commit();
                System.out.println("删除成功");
            } catch (Exception e) {
                tx.rollback();
                System.out.println("删除失败");
            }
        }
    
        // 级联查询
        @Test
        public void test3() {
            Session session = HibernateSessionFactory.getSession();
            try {
                Dept dept = (Dept) session.get(Dept.class, 30);
                Set<Emp> emps= dept.getEmps();
                for (Emp emp : emps) {
                    System.out.println(emp.getEname()+"	"+emp.getDept().getDeptno()+"	"+emp.getSal());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        //lazy属性:一对多。在一方配置
        @Test
        public void test4() {
            Session session = HibernateSessionFactory.getSession();
            try {
                //没有用到emp,默认延迟加载 Dept.hbm.xml set中默认是配置lasy="true",延迟加载
                Dept dept = (Dept) session.get(Dept.class, 30);
                Set<Emp> emps= dept.getEmps();
                //用到了才会去查询
                for (Emp emp : emps) {
                    System.out.println(emp.getEname()+"	"+emp.getDept().getDeptno()+"	"+emp.getSal());
                }
                //加强延迟加载,使用于聚合函数查询中
                System.out.println(emps.size());//统计一共有几条,要有select count(*)语句
                //因为上面for循环查过一次,所以这里再统计,就不会再查一次。
                //如果不写for循环,只输出总数,那么也会是2条语句,不会查询所有信息,只输出聚合函数的查询语句
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    Codeforces 547C/548E
    Codeforces Round #608 (Div. 2) 题解
    Codeforces 7E
    beego项目部署方案
    beego中添加数据事务处理的两种方式
    Golang 高效实践之defer、panic、recover实践
    golang语法学习遇到的坑
    beego及bee安装遇到的问题汇总(gomodule启动项目)
    简单的class文件加密解密
    java导出生成word
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/6036207.html
Copyright © 2020-2023  润新知