• Hibernate关联关系映射


    1.  Hibernate关联关系映射

    1.1.  one to one

    <class name="Person">

        <id name="id" column="personId">

            <generator class="native"/>

        </id>

        <join table="PersonAddress"

            optional="true">

            <key column="personId"

                unique="true"/>

            <many-to-one name="address"

                column="addressId"

                not-null="true"

                unique="true"/>

        </join>

    </class>

    <class name="Address">

        <id name="id" column="addressId">

            <generator class="native"/>

        </id>

    </class>

    1.2.  one to many

    <?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="com.morris.hql.entity.Department" table="DEPARTMENT" schema="SCOTT">

            <id name="deptid" type="java.lang.String">

                <column name="DEPTID" length="20" />

                <generator class="assigned" />

            </id>

            <property name="deptname" type="java.lang.String">

                <column name="DEPTNAME" length="20" not-null="true" />

            </property>

            <set name="employees" inverse="true">

                <key>

                    <column name="DEPTID" length="20" />

                </key>

                <one-to-many class="com.morris.hql.entity.Employee" />

            </set>

        </class>

    </hibernate-mapping>

    1.3.  many to one

    <?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="com.morris.hql.entity.Employee" table="EMPLOYEE" schema="SCOTT">

            <id name="empid" type="java.lang.String">

                <column name="EMPID" length="20" />

                <generator class="assigned" />

            </id>

            <many-to-one name="department" class="com.morris.hql.entity.Department" fetch="select">

                <column name="DEPTID" length="20" />

            </many-to-one>

            <property name="empname" type="java.lang.String">

                <column name="EMPNAME" length="20" not-null="true" />

            </property>

        </class>

    </hibernate-mapping>

    1.4.  many to many

    <class name="Person">

        <id name="id" column="personId">

            <generator class="native"/>

        </id>

        <set name="addresses" table="PersonAddress">

            <key column="personId"/>

            <many-to-many column="addressId"

                class="Address"/>

        </set>

    </class>

    <class name="Address">

        <id name="id" column="addressId">

            <generator class="native"/>

        </id>

    </class>

    1.5.  实例

    1.5.1.  级联添加

    public void addDeptEmp(Department dept, Employee emp) {

     

           Session session = HibernateSessionFactory.getSession();

           Transaction transaction = null;

     

           try {

               transaction = session.beginTransaction();

     

               dept.getEmployees().add(emp);

               emp.setDepartment(dept);

              

               session.save(dept);

     

               transaction.commit();

     

           } catch (Exception e) {

               if (transaction != null) {

                  transaction.rollback();

               }

               e.printStackTrace();

           } finally {

               if (session != null) {

                  session.close();

     

               }

           }

     

        }

    打印的sql语句

    Hibernate:

        select

            employee_.EMPID,

            employee_.DEPTID as DEPTID0_,

            employee_.EMPNAME as EMPNAME0_

        from

            SCOTT.EMPLOYEE employee_

        where

            employee_.EMPID=?

    Hibernate:

        insert

        into

            SCOTT.DEPARTMENT

            (DEPTNAME, DEPTID)

        values

            (?, ?)

    Hibernate:

        insert

        into

            SCOTT.EMPLOYEE

            (DEPTID, EMPNAME, EMPID)

        values

            (?

    , ?

    , ?

    )

    1.5.2.  级联删除

    public void deleteDeptEmp(Department dept, Employee emp) {

           Session session = HibernateSessionFactory.getSession();

           Transaction transaction = null;

           try {

               transaction = session.beginTransaction();

               session.delete(dept);

               transaction.commit();

           } catch (Exception e) {

               if (transaction != null) {

                  transaction.rollback();

               }

               e.printStackTrace();

           } finally {

               if (session != null) {

                  session.close();

               }

    }

    }

    打印的sql语句

    Hibernate:

        select

            department0_.DEPTID as DEPTID1_1_,

            department0_.DEPTNAME as DEPTNAME1_1_,

            employees1_.DEPTID as DEPTID3_,

            employees1_.EMPID as EMPID3_,

            employees1_.EMPID as EMPID0_0_,

            employees1_.DEPTID as DEPTID0_0_,

            employees1_.EMPNAME as EMPNAME0_0_

        from

            SCOTT.DEPARTMENT department0_

        left outer join

            SCOTT.EMPLOYEE employees1_

                on department0_.DEPTID=employees1_.DEPTID

        where

            department0_.DEPTID=?

    Hibernate:

        delete

        from

            SCOTT.EMPLOYEE

        where

            EMPID=?

    Hibernate:

        delete

        from

            SCOTT.DEPARTMENT

        where

            DEPTID=?

    1.5.3.  级联改动

        public void updateDeptEmp() {

           Session session = HibernateSessionFactory.getSession();

           Transaction transaction = null;

     

           try {

               transaction = session.beginTransaction();

              

               Department dept = (Department) session.load(Department.class, "5");

     

               Employee emp = (Employee) session.load(Employee.class, "1001");

     

               dept.setDeptname("就业部");

               emp.setEmpname("a");

              

               session.update(dept);

               session.update(emp);

     

     

               transaction.commit();

     

           } catch (Exception e) {

               if (transaction != null) {

                  transaction.rollback();

               }

               e.printStackTrace();

           } finally {

               if (session != null) {

                  session.close();

               }

           }

     

        }

    打印的sql语句

    Hibernate:

        select

            department0_.DEPTID as DEPTID1_1_,

            department0_.DEPTNAME as DEPTNAME1_1_,

            employees1_.DEPTID as DEPTID3_,

            employees1_.EMPID as EMPID3_,

            employees1_.EMPID as EMPID0_0_,

            employees1_.DEPTID as DEPTID0_0_,

            employees1_.EMPNAME as EMPNAME0_0_

        from

            SCOTT.DEPARTMENT department0_

        left outer join

            SCOTT.EMPLOYEE employees1_

                on department0_.DEPTID=employees1_.DEPTID

        where

            department0_.DEPTID=?

    Hibernate:

        select

            employee0_.EMPID as EMPID0_0_,

            employee0_.DEPTID as DEPTID0_0_,

            employee0_.EMPNAME as EMPNAME0_0_

        from

            SCOTT.EMPLOYEE employee0_

        where

            employee0_.EMPID=?

    Hibernate:

        update

            SCOTT.DEPARTMENT

        set

            DEPTNAME=?

        where

            DEPTID=?

    Hibernate:

        update

            SCOTT.EMPLOYEE

        set

            DEPTID=?,

            EMPNAME=?

        where

            EMPID=?

    1.5.4.  级联查询

    public Employee queryEmployeeById(String id){

           Session session = HibernateSessionFactory.getSession();

           Employee employee = null;

           try {

        employee = (Employee) session.load(Employee.class, id);

        System.out.println(employee.getEmpname());

           } finally {

               if (session != null) {

                  session.close();

               }

           }

           return employee;

          

        }

    打印的sql语句

    Hibernate:

        select

            employee0_.EMPID as EMPID0_0_,

            employee0_.DEPTID as DEPTID0_0_,

            employee0_.EMPNAME as EMPNAME0_0_

        from

            SCOTT.EMPLOYEE employee0_

        where

            employee0_.EMPID=?

    Hibernate:

        select

            department0_.DEPTID as DEPTID1_0_,

            department0_.DEPTNAME as DEPTNAME1_0_

        from

            SCOTT.DEPARTMENT department0_

        where

            department0_.DEPTID=?

    a

  • 相关阅读:
    ABP框架系列之三十:(Javascript-API-Javascript-API)
    MES制造执行系统
    ABP框架系列之二十九:(Hangfire-Integration-延迟集成)
    2017年总结
    ABP框架系列之二十八:(Handling-Exceptions-异常处理)
    ABP框架系列之二十七:(Feature-Management-特征管理)
    ABP框架系列之二十六:(EventBus-Domain-Events-领域事件)
    ABP框架系列之二十五:(Embedded-Resource-Files-嵌入式资源文件)
    mac pro使用2K(2056*1440)设置屏幕解决方法
    DevOps 转型到底难不难(转自成哥的世界)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5344807.html
Copyright © 2020-2023  润新知