I am coding my pet project, back-end delivery service on spring boot. I have orders and couriers. Courier.class
public class Courier {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private Integer id;
...
@OneToMany(mappedBy = "courier", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Order> order= new HashSet<>();
}
Order.class
public class Order{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private Long id;
...
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
private Courier courier;
}
I can add couriers and orders, but then I need to post completion_time to order and add completed order to courier's Set<> @OneToMany The problem is: all post to courier's and order's repo are made in different services, called from different controller, order-controller and courier-controller. When I try to add completion_name to order in OrderService, i do it like that:
Courier courier =new Courier().setId(completeOrder.getCourier_id());
order.setCourier(courier);
and the result is: hibernate deletes all values except id in this courier and doesnt add completed order to courier' set
When I try to change CascadeType to .PERSIST, I get error from Courier.
If I try to add completed order to courier by id, I get
java.lang.StackOverflowError: null