如果您在使用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
将它们包装起来,你可以GET一个Book
,在书籍上访问authors
链接,并使用作者的URI进行PUT以关联。但不能反向操作。
如果你在一个Author上进行GET并在其books
链接上进行PUT,则响应返回200,但关系不会被持久化。
这是期望的行为吗?
@PrePersist
/@PreUpdate
方法中触发同步?或者切换到属性访问方式? - Oliver Drotbohm