OneToMany三种设置方式详解

本文详细解析了JPA中三种配置方式来实现一对一与多对一的关联映射,包括mappedBy属性的使用场景、多对一时如何避免设置外键,以及不同配置下的SQL执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * 三种配置方式:
 * 1. @OneToMany(cascade= {CascadeType.ALL},fetch=FetchType.LAZY ,mappedBy="customId")
 * mappedBy属性用于双向关联实体时使用,
 * mappedBy属性:用在双向关联中,把关系的维护权反转 ; 跟hibernate XML映射中的property-ref一样。
 *
 * JPA执行步骤:一、插入数据到CUSTOM表,
 * 二、执行getAddresses()获取需要持久化的ADDRESS(ADDRESS必须代码设置外键CUSTID),
 * 三、插入数据到ADDRESS表
 *
 * 2.@OneToMany(cascade= {CascadeType.ALL},fetch=FetchType.LAZY )
 * JPA执行步骤: 一、插入数据到CUSTOM表,
 * 二、执行getAddresses()获取需要持久化的ADDRESS(ADDRESS代码不需要设置外键CUSTID),ADDRESS和CUSTOM关系保存在关联表中;
 * 三、插入数据到ADDRESS表
 * 四、插入关联信息到CUSTOM_ADDRESS 表中
 * 另外关联表的字段对应关系也可以手工设置,
 * @JoinTable(name="ref_customer_address",
 * joinColumns={@JoinColumn(name="customer_id",referencedColumnName="custId")},
 * inverseJoinColumns={@JoinColumn(name="address_id",referencedColumnName="addrId")}
 *
 * 3.@OneToMany(cascade= {CascadeType.ALL},fetch=FetchType.LAZY )
 * @JoinColumn(name="customer_id") 对应的是表中的字段,会在最后一步进行该字段的更新
 * 该设置属于单向关联, 该设置需要执行三条SQL操作,不推荐;JPA推荐第一种和第二种做法;
 * JPA执行步骤如下:一、插入数据到CUSTOM表,
 * 二、执行getAddresses()获取需要持久化的ADDRESS(ADDRESS必须代码设置外键CUSTID或者将外键属性设置为可以为空),
 * 三、插入数据到ADDRESS表
 * 四、 然后再UPDATE ADDRESS 设置外键关系customer_id
 *
 * 4.另外多端需要初始化一个空数组
 * private Collection<Address> addresses = new ArrayList<Address>();
 *
 * */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值