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方法将关联对象设置进来。

  • 相关阅读:
    [转帖]译文:如何使用SocketAsyncEventArgs类(How to use the SocketAsyncEventArgs class)
    如何建立一个“绑定友好的”usercontrol--wpf
    安卓学习(三)
    安卓学习(二)
    Android学习1
    用伪代码梳理springboot
    用伪代码梳理javaweb从零开始
    用伪代码梳理spring源码
    java如何写出简洁代码
    JAVA修复微信官方SDK支付XXE漏洞
  • 原文地址:https://www.cnblogs.com/wuyou/p/3448365.html
Copyright © 2011-2022 走看看