hibernate5 一对多映射中set集合的实例化

数据库中有两张表,一张客户表,一张字典表(存放一些常量值,如:客户所属行业:“教育、医疗、金融…”,客户来源:“网络营销,电话营销”,客户的级别:“普通客户,vip客户,vip中p客户”)。客户表与字典表存在外键关联关系,如下图。
这里写图片描述
字典表和客户表的实体类如下:

public class Dict {
    //(简洁省略普通字段)

    //(关联字段)一对多
    // 注意到一个细节是,这里多方的set集合我们没有选择手动初始化
    @JSONField(serialize = false)//FastJson,取消字段的循环引用
    private Set<Customer> sourceSet;
    @JSONField(serialize = false)
    private Set<Customer> industrySet;
    @JSONField(serialize = false)
    private Set<Customer> levelSet;

    //下面是setter和getter
    ...
    }
public class Customer {
    //(简洁省略普通字段)

    // 外键字段(javaBean对象中,不出现外键字段由实体对象取代)
//    private String cust_source;
//    private String cust_industry;
//    private String cust_level;

    //外键实体,用来代替外键字段
    //Customer 与 Dict 有三条一对多的关联 换句话说: Customer有三个外键
    private Dict source;
    private Dict industry;
    private Dict level;

     //下面是setter和getter
    ...
    }

字典表和客户表的映射文件如下:

<hibernate-mapping>
    <class name="me.arjenlee.domain.Dict" table="base_dict">
        <id name="dict_id" column="dict_id">
            <generator class="uuid"/>
        </id>

        <property name="dict_type_code" column="dict_type_code"/>
        <property name="dict_type_name" column="dict_type_name"/>
        <property name="dict_item_name" column="dict_item_name"/>
        <property name="dict_item_code" column="dict_item_code"/>
        <property name="dict_sort" column="dict_sort"/>
        <property name="dict_enable" column="dict_enable"/>
        <property name="dict_memo" column="dict_memo"/>

        <!-- 配置一方 -->

        <!-- 一方: source -->
        <set name="sourceSet" inverse="true">
            <key column="cust_source"/>
            <one-to-many class="me.arjenlee.domain.Customer"/>
        </set>

        <!-- 一方: industry -->
        <set name="industrySet" inverse="true">
            <key column="cust_industry"/>
            <one-to-many class="me.arjenlee.domain.Customer"/>
        </set>

        <!-- 一方: level -->
        <set name="levelSet" inverse="true">
            <key column="cust_level"/>
            <one-to-many class="me.arjenlee.domain.Customer"/>
        </set>

    </class>
</hibernate-mapping>
<hibernate-mapping>
    <class name="me.arjenlee.domain.Customer" table="cst_customer">
        <id name="cust_id" column="cust_id">
            <generator class="native"/>
        </id>
        <property name="cust_name" column="cust_name"/>
        <property name="cust_user_id" column="cust_user_id"/>
        <property name="cust_create_id" column="cust_create_id"/>
        <property name="cust_linkman" column="cust_linkman"/>
        <property name="cust_phone" column="cust_phone"/>
        <property name="cust_mobile" column="cust_mobile"/>
        <property name="filePath" column="filePath"/>

        <!-- 外键 多对一 -->
        <many-to-one name="source" class="me.arjenlee.domain.Dict" column="cust_source"/>
        <many-to-one name="industry" class="me.arjenlee.domain.Dict" column="cust_industry"/>
        <many-to-one name="level" class="me.arjenlee.domain.Dict" column="cust_level"/>

    </class>
</hibernate-mapping>

测试:通过查询字典表,发现字典表中的set集合框架已经帮我们实例化了,而且也装入了相应的customer对象。

public class DictDaoImpl extends HibernateDaoSupport implements DictDao {
    @Override
    public List<Dict> findByCode(String dict_type_code) {
        List<Dict> result= (List<Dict>)this.getHibernateTemplate().find("from Dict where dict_type_code = ?", dict_type_code);
        return result;
    }
}

这里写图片描述

总结:hibernate5 一对多映射,我们没有手动将实体对象中的set集合实例化(如下所示:),框架也会自动实例化实体对象中的set集合,并装入对应的值。

    private Set<Customer> sourceSet;
    private Set<Customer> industrySet;
    private Set<Customer> levelSet;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值