Hibernate中一对多|多对一orm元数据关系的配置

1.少的一方Customer.java

public class Customer {

    /*CREATE TABLE `cst_customer` (
              `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
              `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
              `cust_user_id` bigint(32) DEFAULT NULL COMMENT '负责人id',
              `cust_create_id` bigint(32) DEFAULT NULL COMMENT '创建人id',
              `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
              `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
              `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
              `cust_linkman` varchar(64) DEFAULT NULL COMMENT '联系人',
              `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
              `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
              PRIMARY KEY (`cust_id`)
            )*/
    
    private Long cust_id;          //客户编号(主键)
    private String cust_name;        //客户名称(公司名称)
    private String cust_user_id;     //负责人id
    private String cust_create_id;   //创建人id
    private String cust_source;      //客户信息来源
    private String cust_industry;    //客户所属行业
    private String cust_level;       //客户级别
    private String cust_linkman;     //联系人
    private String cust_phone;       //固定电话
    private String cust_mobile;      //移动电话
    
    //创建一个set集合用来存储多个联系人信息
    private Set<LinkMan> linkMans = new HashSet<>();
   

}

相应的配置文件Customer.hbm.xml

<hibernate-mapping package="com.wenhao.domain">
    <class name="Customer" table="cst_customer">
        <id name="cust_id" column="cust_id">
            <generator class="native"></generator>
        </id>
        <property name="cust_name" column="cust_name"></property>
        <property name="cust_user_id" column="cust_user_id"></property>
        <property name="cust_create_id" column="cust_create_id"></property>
        <property name="cust_source" column="cust_source"></property>
        <property name="cust_industry" column="cust_industry"></property>
        <property name="cust_level" column="cust_level"></property>
        <property name="cust_linkman" column="cust_linkman"></property>
        <property name="cust_phone" column="cust_phone"></property>
        <property name="cust_mobile" column="cust_mobile"></property>
        <!-- 集合,一对多关系,在配置文件中配置 -->
        <!--
            name属性: set集合属性名
            column: 数据库中外键列名
            class属性: 与我关联的对象的完整类名(hibernate-mapping package="com.wenhao.domain"中已经配置了包名,这里只需配置包名即可)

         -->

 <!--
             cascade级联操作:
                     save-update : 级联保存
                     delete      : 级联删除
                     all         : save-update + delete
          -->
          <!--
                  inverse属性 : 配置关系是否维护
                  true : Customer 不维护关系
                  false(默认值) : Customer维护关系
                  
                  inverse属性 : 性能优化,提高关系维护的性能
                  原则 : 无论怎样放弃,总要有一方维护外键关系
                  一对多关系中: 一的一方放弃维护外键关系,多的一方不能放弃维护外键关系
           -->

        <set name="linkMans" cascade="save-update" inverse="true">
            <!-- 配置外键:外键在多的一方 -->
            <key column="lkm_cust_id"></key>
            <one-to-many class="LinkMan"/>
        </set>

    </class>

</hibernate-mapping>


2 .多的一方: LinkMan.java

public class LinkMan {

    /**
     * CREATE TABLE `cst_linkman` (
      `lkm_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '联系人编号(主键)',
      `lkm_name` varchar(16) DEFAULT NULL COMMENT '联系人姓名',
      `lkm_cust_id` bigint(32) NOT NULL COMMENT '客户id',
      `lkm_gender` char(1) DEFAULT NULL COMMENT '联系人性别',
      `lkm_phone` varchar(16) DEFAULT NULL COMMENT '联系人办公电话',
      `lkm_mobile` varchar(16) DEFAULT NULL COMMENT '联系人手机',
      `lkm_email` varchar(64) DEFAULT NULL COMMENT '联系人邮箱',
      `lkm_qq` varchar(16) DEFAULT NULL COMMENT '联系人qq',
      `lkm_position` varchar(16) DEFAULT NULL COMMENT '联系人职位',
      `lkm_memo` varchar(512) DEFAULT NULL COMMENT '联系人备注',
      PRIMARY KEY (`lkm_id`),
      KEY `FK_cst_linkman_lkm_cust_id` (`lkm_cust_id`),
      CONSTRAINT `FK_cst_linkman_lkm_cust_id` FOREIGN KEY (`lkm_cust_id`) REFERENCES `cst_customer` (`cust_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
)
     */
    private Long lkm_id ;
    private Character lkm_gender ;
    private String lkm_name;
    private String lkm_phone;
    private String lkm_mobile;
    private String lkm_email;
    private String lkm_qq;
    private String lkm_position;
    private String lkm_memo;
    //该对象属于哪个customer对象管理
    private Customer customer ;
   

}

相应的配置文件LinkMan.hbm.xml

<hibernate-mapping package="com.wenhao.domain">
    <class name="LinkMan" table="cst_linkman">
        <id name="lkm_id" column="lkm_id">
            <generator class="native"></generator>
        </id>
        <property name="lkm_name"></property>
        <property name="lkm_gender" ></property>
        <property name="lkm_phone"></property>
        <property name="lkm_mobile" ></property>
        <property name="lkm_email" ></property>
        <property name="lkm_qq" ></property>
        <property name="lkm_position" ></property>
        <property name="lkm_memo" ></property>
        <!-- 多对一  -->
        <!--
            name属性: Customer对象属性名
            column: 数据库中外键列名
            class属性: 与我关联的对象的完整类名
         -->
        <many-to-one name="customer" column="lkm_cust_id" class="Customer"></many-to-one>
    </class>
</hibernate-mapping>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值