首页 > Web开发 > 详细

hibernate_03_hibernate一对多的关系映射

时间:2019-12-18 18:32:35      阅读:82      评论:0      收藏:0      [点我收藏+]

1.实体类的一对多的关系映射

一个客户对应多个联系人

Customer.java

@Data
public class Customer {
    private Long cust_id;
    private String cust_name;
    private String cust_source;
    private String cust_industry;
    private String cust_level;
    private String cust_phone;
    private String cust_mobile;
    // 通过ORM方式表示:一个客户对应多个联系人。
    // 放置的多的一方的集合。Hibernate默认使用的是Set集合。
    private Set<LinkMan> linkMans = new HashSet<LinkMan>();   
}

 LinkMan.java

@Data
public class LinkMan {
    private Long lkm_id;
    private String lkm_name;
    private String lkm_gender;
    private String lkm_phone;
    private String lkm_mobile;
    private String lkm_email;
    private String lkm_qq;
    private String lkm_position;
    private String lkm_memo;
    // 通过ORM方式表示:一个联系人只能属于某一个客户。
    // 放置的是一的一方的对象。
    private Customer customer;
}

 2.映射文件的一对多的关系映射

Customer.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.work.entity.Customer" table="cst_customer">
        <!-- 建立OID与主键映射 -->
        <id name="cust_id" column="cust_id">
            <generator class="native"/>
        </id>
        <!-- 建立普通属性与数据库表字段映射 -->
        <property name="cust_name" column="cust_name" />
        <property name="cust_source" column="cust_source"/>
        <property name="cust_industry" column="cust_industry"/>
        <property name="cust_level" column="cust_level"/>
        <property name="cust_phone" column="cust_phone"/>
        <property name="cust_mobile" column="cust_mobile"/>
        <!-- 配置一对多的映射:放置的多的一方的集合 -->
        <!-- 
            set标签 :
                * name    :多的一方的对象集合的属性名称。
                * cascade:级联
                * inverse:放弃外键维护权。
        -->
        <set name="linkMans" cascade="save-update,delete" inverse="true">
            <!--
                 key标签
                    * column:多的一方的外键的名称。
             -->
            <key column="lkm_cust_id"/>
            <!-- 
                one-to-many标签
                    * class    :多的一方的类的全路径
             -->
            <one-to-many class="com.work.entity.LinkMan"/>
        </set>
    </class>
</hibernate-mapping>

 

 LinkMan.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.work.entity.LinkMan" table="cst_linkman">
        <!-- 建立OID与主键映射 -->
        <id name="lkm_id" column="lkm_id">
            <generator class="native"/>
        </id>
        <!-- 建立普通属性与表字段映射 -->
        <property name="lkm_name"/>
        <property name="lkm_gender"/>
        <property name="lkm_phone"/>
        <property name="lkm_mobile"/>
        <property name="lkm_email"/>
        <property name="lkm_qq"/>
        <property name="lkm_position"/>
        <property name="lkm_memo"/>
        <!-- 配置多对一的关系:放置的是一的一方的对象 -->
        <!-- 
            many-to-one标签
                * name        :一的一方的对象的属性名称。
                * class        :一的一方的类的全路径。
                * column    :在多的一方的表的外键的名称。
         -->
        <many-to-one name="customer" cascade="save-update,delete" class="com.work.entity.Customer" column="lkm_cust_id"/>
    </class>
</hibernate-mapping>

 

 3.一对多的操作

1>保存一个客户,和客户下的两个联系人

@Test
    public void saveOrUupdate() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        Customer customer = new Customer();
        customer.setCust_name("xj");

        LinkMan linkMan1 = new LinkMan();
        linkMan1.setLkm_name("hdh");

        LinkMan linkMan2 = new LinkMan();
        linkMan1.setLkm_name("hdh");

        customer.getLinkMans().add(linkMan1);
        customer.getLinkMans().add(linkMan2);

        session.save(customer);
        session.save(linkMan1);
        session.save(linkMan2);

        tx.commit();

    }

 

2>通过级联进行保存一个客户,和客户下的两个联系人

级联操作: 级联指的是,操作一个对象的时候,会同时操作其关联的对象。

级联操作需要对进行操作的一方进行配置:cascade="save-update,delete"

<set name="linkMans" cascade="save-update,delete" inverse="true">
            <!--
                 key标签
                    * column:多的一方的外键的名称。
             -->
            <key column="lkm_cust_id"/>
            <!-- 
                one-to-many标签
                    * class    :多的一方的类的全路径
             -->
            <one-to-many class="com.work.entity.LinkMan"/>
        </set>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hibernate_03_hibernate一对多的关系映射

原文:https://www.cnblogs.com/asndxj/p/12061306.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!