REST URI данных Spring против идентификатора объекта
Spring Data REST (и Spring HATEOAS в частности) отделяет RESTful ID (а именно, URI) от идентификаторов сущностей, и I 'Я не могу связать их обратно при сохранении новых объектов. Смотрите интересную дискуссию вокруг этого разделения вhttps://github.com/SpringSource/spring-data-rest/issues/13.
Предположим, что клиентское приложение хочет создать новыйTicket
ресурс со связаннымTicketCategory
ресурс. Я хочу опубликоватьTicket
по отношению к удаленной конечной точке REST Spring Data.Ticket
Безразлично»еще не имеют удостоверения личности, так какс новым.TicketCategory
имеет идентификатор, но на клиенте этоURI согласно приведенному выше обсуждению. Поэтому, когда я сохраняюTicket
Spring Data REST передаетTicket
в Spring Data JPA, который неэто нравится: Spring Data JPA считает, что -TicketCategory
не имеющий идентификатора сущностипереходный процесс:
org.hibernate.TransientPropertyValueException:
Not-null property references a transient value -
transient instance must be saved before current operation:
com.springinpractice.ch13.helpdesk.model.Ticket.category ->
com.springinpractice.ch13.helpdesk.model.TicketCategory
ОБНОВИТЬ: Документация на
https://github.com/SpringSource/spring-data-rest/wiki/JPA-Repository-REST-Exporter
имеет раздел под названием "Обновление отношений " это описывает схему, использующую HTTP POST для установления отношений между сущностями. Я нене знаю, если этоЭто единственный доступный в настоящее время подход, но, по-видимому, этот подход потребует оставить нулевую ассоциацию на начальном посте, а затем обновить ее последующим постом. В вышеприведенном случае это было бы нежелательно, поскольку поле категории обязательно (@NotNull
) для билетов.