持久化多个对象 Hibernate:非空属性引用一个瞬态值

问题描述

我在尝试将一些对象保存到数据库时遇到困难。从前端,我发送了一个 Order obj,它是一个数组,其中包含一个 Customer obj,后跟一个 Boat objs 数组。

当我尝试只执行 OrderRepo.save(order) 时,我得到“not-null 属性引用一个瞬态值”,因为 Order 需要先保存 Customer,而 Boats 需要先保存 Order。

我试过了:

            customerRepo.save(orderObj.getCustomer());

            Order order = orderRepo.save(orderObj);

            List<Boat> list = new ArrayList<>();
            for (Boat boat : orderObj.getBoats()) {
                boat.setorder(order);
                list.add(boat);
            }
            for(Boat boat : list){
                boatRepo.save(boat);
            }

这有效,但是当我调用 orderRepo.findAll() 时给我一个 StackOverflowError,因为它调用调用 Boat 的调用调用 Boat 等的 Order。

我的服务应该是什么样的?如何在不创建无限递归的情况下保留所有对象?

提前致谢!!

以下是我的模型,以防万一: 订单:


    @Id
    @GeneratedValue
    @Column(name = "order_id")
    private int order_id;

    @OnetoOne(fetch = FetchType.LAZY,optional = false)
    @JoinColumn(name = "customer_id",nullable = false)
    private Customer customer;

    @OnetoMany(mappedBy = "order",cascade = CascadeType.ALL)
    private List<Boat> boats;

船:

@Entity
@Table(name = "boat")
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class Boat {

    @Id
    @Column(name = "id")
    private String id;

    //  more fields

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "order_id",referencedColumnName = "order_id")
    private Order order;

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)