У меня есть связь OneToMany между классом Order и классом Address. Один адрес может иметь много заказов, но один заказ предназначен только для одного адреса.
Класс заказа
@Entity
@Table(name = "orders")
public class Order {
@Id
@Column(name = "order_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer orderId;
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.???})
@JoinColumn(name = "contact_id")
private Address shippingAddress;
//other fields, getters, setters
}
Класс адреса
@Entity
@Table
public class Address {
@Id
@Column(name = "contact_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer contactId;
@OneToMany(mappedBy = "shippingAddress", cascade = {CascadeType.???})
private Set<Order> orders = new HashSet<>();
//other fields, getters, setters
}
Итак, в этом случае: @ManyToOne(fetch = FetchType.LAZY); @OneToMany(mappedBy = "shippingAddress", cascade = {CascadeType.MERGE/PERSIST/REFRESH})
когда я пытаюсь создать заказ с адресом, не сохраненным в db, я ловлю TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : store.entity.Order.shippingAddress -> store.entity.Address
.
В другом случае, когда я добавляю CascadeType.MERGE/PERSIST/REFRESH
к Order
классу, я ловлю PersistentObjectException: detached entity passed to persist: store.entity.Address
.
И, конечно, если заказ был удален, адрес не будет удален.
Надеюсь, вы меня понимаете:)