问题描述
我在尝试将一些对象保存到数据库时遇到困难。从前端,我发送了一个 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 (将#修改为@)