Hibernate каскадный тип с отношениями OneToMany - PullRequest
0 голосов
/ 24 октября 2019

У меня есть связь 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.

И, конечно, если заказ был удален, адрес не будет удален.

Надеюсь, вы меня понимаете:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...