使用Spring Data REST。如果您有oneToMany或ManyToOne關係,則PUT操作在「非擁有」實體上返回200,但實際上並未持續連接的資源。如何與Spring Data REST和JPA保持雙向關係?
示例實體。
@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
支持他們,你可以得到一本書,跟隨作者的書鏈接,做一個PUT與URI一個作者與相關聯的。你不能走另一條路。
如果你做一個作者一個GET,做一個穿上它的圖書鏈接,響應返回200,但關係永遠不會持久。
這是預期的行爲?
雙向關聯必須手動維護在對象模型中,通常在setters內完成。 Spring Data REST默認使用字段訪問。這意味着協會的變化不會在定義的協會的另一面反映出來。你有沒有試過,在'@ PrePersist' /'@ PreUpdate'方法中觸發同步?或切換到財產訪問? –
我也投票解決雙向關聯。一個'Author'可以存在,沒有'Book'。可以使用存儲庫方法'設置 BookRepository.findByAuthor(作者作者)'來檢索'作者'的書籍。這樣可以簡化模型,因爲您不必手動維護引用。 –
我可以看到一個庫界面,您需要找到作者,然後查看它的書籍。如果沒有雙向關聯,這將不被支持。不是管理實體關聯的粉絲,如果它不是DATA REST的意圖。感謝您的參與,對書籍作者進行過濾似乎是最好的方法。不要在任何可能的情況下保持單向。 :) – keaplogik