zoukankan      html  css  js  c++  java
  • Hibernate 多对一关系中,在多的一方进行数据的插入

    先看两个映射关系:

    部门:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="com.hyy.hibernate.one_to_many.domain">
    
        <class name="Department">
    
            <id name="id">
                <generator class="native"/>
            </id>
    
            <property name="name"/>
    
            <property name="address"/>
    
            <set name="emps" cascade="save-update">
                <key column="depart_id"/>
                <one-to-many class="Employee"/>
            </set>
    
        </class>
    
    </hibernate-mapping>

    员工:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="com.hyy.hibernate.one_to_many.domain">
    
        <class name="Employee">
    
            <id name="id">
                <generator class="native"/>
            </id>
    
            <property name="name"/>
    
            <property name="birthday"/>
    
            <!-- 多对一的映射,首先会找到depart引用的类,拿column(外键)与Department的id一起比较 -->
            <many-to-one name="depart" column="depart_id" lazy="false" fetch="join"/>
    
        </class>
    
    </hibernate-mapping>

    测试类:

     //创建部门
            Department department = new Department();
            department.setName("dept");
            department.setAddress("department");
    
            //创建员工1
            Employee employee1 = new Employee();
            employee1.setName("11111");
    
            //创建员工2
            Employee employee2 = new Employee();
            employee2.setName("22222");
    
            //在此只添加一个部门和一个员工(我们下面再会添加一个)
            Session session = HibernateUtil.getSession();
            Transaction transaction = session.beginTransaction();
            department.getEmps().add(employee1);
            session.save(department);
            transaction.commit();
            session.close();

    System.out.println(
    "以下为emp设置dept,用load,它不会产生查询!如果用get则有查询!用load是正确的"); Session session2 = HibernateUtil.getSession(); Transaction transaction2 = session2.beginTransaction(); //重点看这里 Department department1 =(Department) session2.load(Department.class,1); employee2.setDepart(department1); session2.save(employee2); transaction2.commit(); session2.close(); System.out.println("—————————————数据插入完成—————————————————");

    总结:我们添加一个对象的时候,并且要添加的这个对象与另一方有关联,则我们可以把另一方的对象使用sesion.load方法将其代理出来,然后通过添加对象的set方法将关联对象设置进来。

  • 相关阅读:
    python+selenium 定位隐藏元素
    数据库的几种去重方法总结
    用例设计方法与测试实践相结合思路
    边界值分析法
    等价类分析法
    CYQ.Data 支持分布式数据库(主从备)高可用及负载调试
    linux下rpm包安装、配置和卸载mysq
    linux命令 rpm
    Linux命令之rpm
    Linux rpm命令详解
  • 原文地址:https://www.cnblogs.com/wuyou/p/3448365.html
Copyright © 2011-2022 走看看