ero*_*ppa 5 spring hibernate jpa spring-data spring-data-rest
我从这里https://www.baeldung.com/spring-data-rest-relationships下载了一个示例项目
然后,我运行它并进行了一些测试REST调用。据我所知,您只能使用SDR从所有者方更新关联。我的意思是
public class Book {
@ManyToOne
@JoinColumn(name = "library_id")
private Library library;
}
Run Code Online (Sandbox Code Playgroud)
和
public class Library {
@OneToMany(mappedBy = "library")
private List<Book> books;
}
Run Code Online (Sandbox Code Playgroud)
您实际上无法对/ libraries / 1 / books进行发布/发布调用。服务器返回204,但对数据库没有任何影响。
但是,您可以对/ books / 1 / library进行post / put调用,一切都会按预期进行,包括使另一个实体保持同步。
这正常吗?@ManyToMany的行为也相同。有没有办法允许双方进行更新?如果我编写自己的API,我当然可以解决。SDR为什么不这样做?
这是正常的吗?
从某种意义上说,是的。Book这正是当您将 a 添加到当前映射的集合中时纯 JPA 的行为方式Library.books- 它不会进行任何更改。
我的猜测是,Spring Data Rest 不知道(或关心)关联的哪一侧是所有者一侧,并且只是没有付出额外的努力来确保更新反面也能正常工作。
有没有办法允许双方更新?
解决方法可能是简单地假装协会双方都是拥有方,即:
public class Library {
@OneToMany
@JoinColumn(name = "library_id")
private List<Book> books;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这使得 Hibernate 将Library.books和Book.library视为两个完全独立的关联。在某些极端情况下,您的实体可能不会按照您期望的方式运行。你被警告了。
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |