zoukankan      html  css  js  c++  java
  • 6、Many-to-one的单向

    1、在1:n的关系中,

         在Class的关系中,应该在n的一方,持有1的一方的引用。

         在Table的关系中,应该是n的一方有外键

    many-to-one (用在n的一方的 hbm.xml的配置文件中)

    关于 many-to-one 的一些测试代码

    1、测试添加顺序的先后关系  ----最佳实践:一定要先添加一的一方,之后在添加多的一方

        1.1先添加1的一方,再添加n的一方

    public void testAdd01() {
            Session session = null;
            try {
                session = HibernateUtil.openSession();
                session.beginTransaction();
                //先添加1
                Classroom c = new Classroom();
                c.setGrade(2012);
                c.setName("计算机网络技术");
                session.save(c);
                
                //在添加n
                Student stu1 = new Student();
                stu1.setName("猪八戒");
                stu1.setNo("001");
                stu1.setClassroom(c);
                session.save(stu1);
                Student stu2 = new Student();
                stu2.setName("孙悟空");
                stu2.setNo("002");
                stu2.setClassroom(c);
                session.save(stu2);
                
                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
                if(session!=null) session.getTransaction().rollback();
            } finally {
                HibernateUtil.close(session);
            }
        }

        1.2 先添加n的一方,再添加1的一方

        

    public void testAdd02() {
            Session session = null;
            try {
                session = HibernateUtil.openSession();
                session.beginTransaction();
                //先添加n
                Student stu1 = new Student();
                stu1.setName("沙僧");
                stu1.setNo("003");
                session.save(stu1);
                Student stu2 = new Student();
                stu2.setName("唐僧");
                stu2.setNo("004");
                session.save(stu2);
                //在添加1
                Classroom c = new Classroom();
                c.setGrade(2012);
                c.setName("计算机应用技术");
                session.save(c);
                
                //此时还会发两条update
                stu1.setClassroom(c);
                stu2.setClassroom(c);
                //最佳实践:一定要先添加一的一方,之后在添加多的一方
                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
                if(session!=null) session.getTransaction().rollback();
            } finally {
                HibernateUtil.close(session);
            }
        }

    2、测试many-to-one中 cascade的用法 -------一般不在多的一方使用cascade,可能使用cascade的地方一般都是一的一方进行删除时使用

        

    public void testAdd03() {
            Session session = null;
            try {
                session = HibernateUtil.openSession();
                session.beginTransaction();
                Classroom c = new Classroom();
                c.setGrade(2012);
                c.setName("计算机信息管理");
                //此时classroom没有存储,所以在添加student的时候没有外键,会抛出异常
                //运用casecade=all可以解决
                Student stu1 = new Student();
                stu1.setName("如来");
                stu1.setNo("005");
                session.save(stu1);
                Student stu2 = new Student();
                stu2.setName("观音");
                stu2.setNo("006");
                session.save(stu2);
                stu1.setClassroom(c);
                stu2.setClassroom(c);
                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
                if(session!=null) session.getTransaction().rollback();
            } finally {
                HibernateUtil.close(session);
            }
        }

    3、关于懒加载问题的测试 -----student的关联对象Classroom也是延迟加载的,会再发一条sql来取对象

        

    public void testLoad() {
            Session session = null;
            try {
                session = HibernateUtil.openSession();
                session.beginTransaction();
                Student stu = (Student)session.load(Student.class, 1);
                //此时仅仅只是发一条sql
                System.out.println(stu.getName());
                //此时student的关联对象Classroom也是延迟加载的,会再发一条sql来取对象
                System.out.println(stu.getClassroom().getName());
                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
                if(session!=null) session.getTransaction().rollback();
            } finally {
                HibernateUtil.close(session);
            }
        }
  • 相关阅读:
    redis+Keepalived主从热备切换实例
    启动tomcat时报错:http-nio-8080-exec-10
    HAProxy 的acl应用
    keepalived vip 没有生成或者生成了ping不通?
    CentOS7 PHP+Redis实现Session共享
    CentOS7 安装phpMyAdmin-4.8.3-all-languages
    CentOS7 yum安装配置 drbd-84-utils (外部模式)
    Python-网络编程之进程
    Python-网络编程之socket
    Python-面向对象之反射
  • 原文地址:https://www.cnblogs.com/zhangbaowei/p/4867624.html
Copyright © 2011-2022 走看看