Hibernate 一对多注解配置

好久没用Hibernate,导致一对多注解配置,和级联保存搞了好长一段时间,才让代码跑通了。

主类

public class OrderBaseModel {
    @OneToMany(mappedBy = "order", cascade = {CascadeType.ALL})
    @NotFound(action = NotFoundAction.IGNORE)
    public List<OrderItemModel> items = new ArrayList<OrderItemModel>();
}

@OneToMany(mappedBy = “order”, cascade = {CascadeType.ALL})

mappedBy 是对应附类(也就是多的那一方),下面的主类对象名。
cascade是级联保存是的策略,这个还不是很清楚,可以默认先选ALL

@NotFound(action = NotFoundAction.IGNORE)

这个注解是用来,当附类找不到主类对象时(似乎hibernate会去数据库中找),该附类对象就会被忽略,不会被保存,这是用于级联保存时用的。

附类

public class OrderItemModel {
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "order_id", referencedColumnName = "id")
    public OrderBaseModel order = new OrderBaseModel();
}

@ManyToOne(fetch = FetchType.EAGER)

  1. FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。
  2. FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载

@JoinColumn(name = “order_id”, referencedColumnName = “id”)

一般会有多的一方来维护关系,也就是在附类加上JoinColumn注解
name是指定附类的外键字段名,referencedColumnName 是对应主类对象中的主键名。

级联保存

最后主类级联保存的时候,到手动对附类对象进行设值,不然附类对象是保存不进去的,我本来以为会自动设值,结果怎么都保存不进去,后来手动设了一下,就保存进去了。

如下:

private void saveOrders(List<OrderBaseModel> orders) {

        orders.forEach(orderBaseModel -> {
            orderBaseModel.items.forEach(orderItemModel -> {
                orderItemModel.order = orderBaseModel;
            });
        });
        orderBaseModelRespository.save(orders);

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值