JPA映射关系_day03

1 单向一对多

单向一对多用得比较少(性能差),但是依然要求必须掌握,因为我们在使用双向一对多还会用到单向一对多的相应配置

1.1 映射关系

//产品分类
@Entity
@Table(name = "t_productdir")
public class ProductDir {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    //配置onetomany --- 配置集合
    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name = "dir_id") //设置外键
    private Set<Product> products = new HashSet<>();
    get/set方法
}

我们一般不使用单向一对多(原因:性能太差)
3条insert,2条update,无论怎样调整保存的顺序,都会有额外的update语句
原因就是现在外键是由一方来处理,一方处理必须发出额外的update语句

1.2 延迟加载

我们修改成FetchType.EAGER后,不管有没有找类型项目的商品,它都会马上发送SQL来去查询数据
在配置映射关系的时候如果是@ManyToOne(fetch=FetchType.LAZY)@OneToMany(fetch=FetchType.LAZY)@ManyToMany(fetch=FetchType.LAZY)都是默认使用延迟加载提高性能的。
只有Many在后面都是使用延迟加载获取数据

1.3 判断集合是否有值

要通过一方集合属性的size是否为0判断集合是否有值,不能通过集合是否为null来配置,这个和单向多对一是不同的

2 集合映射

声明集合的时候必须使用接口

2.1 集合映射的JAVA类型

常用的有2种:
java.util.Set对应PersistentSet
java.util.List对应PersistentBag

Set:不能重复,集合里面的元素没有顺序
List:可以重复,集合里面的元素有顺序

2.2 怎么选择集合映射?

看数据是否会重复,是否需要顺序
set一般用于多对多,也有一对多
list一般只是用在组合关系

2.3 set映射

特点:无序,不可以重复

//配置onetomany --- 配置集合
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "dir_id") //设置外键
private Set<Product> products = new HashSet<>();

2.4 list映射

特点:有序,可以重复,一般用在组合关系

@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "dir_id")    
private List<ProductSet> products = new ArrayList<ProductSet>();

2.5 小结

  1. 配置集合的时候必须配置接口
  2. 一般都是使用Set接口,只有组合关系使用List接口
  3. 使用List接口的时候可以配置@Order进行排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值