Например, у меня есть эти объекты (немного модифицированные сущности из restbucks примера):Как PUT только GETted сущности с OneToMany отношения назад
class Order {
// ID, getters etc
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
Set<Item> items;
}
class Item {
// ID, getters etc
@ManyToOne
Order order;
}
И Repository
для каждого.
Теперь, если я GET /orders/1
то есть JSON с простыми полями order
и ссылки на items
этого порядка в _links
атрибута.
Если я затем изменю некоторые поля и просто PUT
, то JSON вернется к /orders/1
, тогда все поля изменены корректно, но дополнительно Set<Item> items
очищается. Фактически они удалялись как orphanRemoval = true
. В спящем режиме я вижу:
Hibernate: select order0_.id as id1_3_0_, order0_.location as location2_3_0_, order0_.ordered_date as ordered_3_3_0_, order0_.status as status4_3_0_ from rborder order0_ where order0_.id=?
Hibernate: select items0_.order_id as order_id8_3_0_, items0_.id as id1_1_0_, items0_.id as id1_1_1_, items0_.milk as milk2_1_1_, items0_.name as name3_1_1_, items0_.order_id as order_id8_1_1_, items0_.currency as currency4_1_1_, items0_.value as value5_1_1_, items0_.quantity as quantity6_1_1_, items0_.size as size7_1_1_ from item items0_ where items0_.order_id=?
Hibernate: update rborder set location=?, ordered_date=?, status=? where id=?
Hibernate: delete from item where id=
Но что, если мне нужно сохранить эти предметы? Я должен использовать PATCH
? Что делать, если я хочу не отслеживать от клиента, какие поля меняются.
Например:
- упорядочивание от JS и присвоить его переменной
- ли некоторые изменения в полях. Не отслеживается , которое изменило поля.
- PUT с измененным заказом.
В настоящее время в заказе нет товаров.
Там нет необходимости отслеживать, какие поля изменились при использовании пластыря. – zeroflagL