При работе с Spring Data REST, если у вас есть отношение OneToMany
или ManyToOne
, операция PUT возвращает 200 для "не владеющего" объекта, но фактически не сохраняет присоединенный ресурс.
Пример сущностей:
@Entity(name = 'author')
@ToString
class AuthorEntity implements Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id
String fullName
@ManyToMany(mappedBy = 'authors')
Set<BookEntity> books
}
@Entity(name = 'book')
@EqualsAndHashCode
class BookEntity implements Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id
@Column(nullable = false)
String title
@Column(nullable = false)
String isbn
@Column(nullable = false)
String publisher
@ManyToMany(fetch = FetchType.LAZY, cascade = [CascadeType.ALL])
Set<AuthorEntity> authors
}
Если вы поддерживаете их с помощью PagingAndSortingRepository
, вы можете ПОЛУЧИТЬ Book
, PagingAndSortingRepository
по ссылке authors
в книге и сделать PUT с URI автора, с которым хотите связаться. Вы не можете пойти другим путем.
Если вы выполняете GET для автора и делаете PUT для ссылки на books
, ответ возвращает 200, но связь никогда не сохраняется.
Это ожидаемое поведение?