微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决持久化多个对象 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 举报,一经查实,本站将立刻删除。