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