一对多,一个用户对应多个地址

前面的文章研究了一对一,多对一,多对一可以搞成外键一对一和多对一,就在于是否设置了unique=”true”

这个外键要搞清楚,不管是一对多,还是多对一,一定都是多的一方添加外键!!!!!!!!!!!!这个很容易想明白,你添加了外键,才可以多嘛

但是配置代码应该写在多对一的主语表里面,如果是多个用户对应一个地址,多就是用户,所以配置代码应该写在用户里面,
前面的一对多也是一样的,一个用户对应多个地址,主语是用户,配置代码应该写在用户里面
其实我们这里 所说的主语,就是主表,这其实是一种约定,主语应该在设计数据库表的时候就应该设定,不应该随意变,设置了主表是用户表,那么所有的配置代码都应该写在用户表里面,一对多,多对一,也都是对于主表而言的

这个东西很容易搞混,如果你不提醒自己那个是主表,那个是从表的话,一个用户对应多个地址,如果你把配置代码写在地址表里面,实际上就是以地址表为主表,反过来念就是多个地址对应一个用户,所以在地址表的配置里面就应该使用多对一的标签,这东西还真是颠来倒去的很容易搞错啊

所以我们一开始就要提醒自己那个是主表,那个是从表,配置代码一律写在主表里面,主语就是主表,不得更改

好了,啰嗦了这么多,我们来看一个用户对应多个地址,代码该怎么写
首先一个用户对应多个地址,在实体代码里面,用户的地址属性就应该更改,原来是一个地址,现在就应该是多个地址,很显然,要用集合或者列表

private Address address;  //改成下面这样
private Set<Address> addresses=new HashSet<Address>(); 

用户表的配置代码是这样

<set name="addresses" table="ADDRESS" inverse="false" lazy="true">
            <key>
                <column name="USER_ID" />
            </key>
            <one-to-many class="Address" />
</set>

one-to-many和many-to-one的配置还是大有不同,我们比较一下

<many-to-one name="address" column="address_id" />

虽然在这里user的地址属性在实体类里面是集合类型,但是映射到数据库中是这样的,两张表通过外键USER_ID链接起来
这里写图片描述

这里写图片描述

一个用户对应多个地址这种配置方法需要将地址属性转换成集合,
为什么多个用户对应一个地址不需要呢????????

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值