Spring Data Rest为何只允许从ManyToOne / ManyToMany的所有者方进行更新?

我从这里https://www.baeldung.com/spring-data-rest-relationships下载了一个示例项目

然后我运行它并进行了一些测试REST调用。据我所知,您只能使用SDR从所有者方更新关联。我的意思是

public class Book {
    @ManyToOne
    @JoinColumn(name = "library_id")
    private library library;
}

public class library {
    @OneToMany(mappedBy = "library")
    private List<Book> books;
}

您实际上无法对/ libraries / 1 / books进行发布/发布调用。服务器返回204,但对数据库没有任何影响。

但是,您可以对/ books / 1 / library进行post / put调用,一切都会按预期进行,包括使另一个实体保持同步。

这正常吗? @ManyToMany的行为也相同。有没有办法允许双方进行更新?如果我编写自己的API,我当然可以解决。 SDR为什么不这样做?

wawd1314 回答:Spring Data Rest为何只允许从ManyToOne / ManyToMany的所有者方进行更新?

  

这正常吗?

从某种意义上说是的。当您使用当前映射将Book添加到Library.books的集合中时,这就是纯JPA的行为-它不会做任何更改。

我的猜测是,Spring Data Rest不知道(或不在乎)关联的哪一方是所有者一方,而且也没有付出额外的努力来确保更新相反的一方也能正常工作。

  

有没有办法允许双方进行更新?

可以通过一种变通方法来简单地假装关联的双方都是拥有方,即:

public class Library {

    @OneToMany
    @JoinColumn(name = "library_id")
    private List<Book> books;
}

请注意,这使Hibernate将Library.booksBook.library视为两个完全独立的关联。在某些极端情况下,您的实体可能无法达到预期的效果。你被警告了。

,

从双方更新双向关系非常棘手,考虑到Springs端点授权或Spring Data REST BeforeLinkSaveEventAfterLinkSaveEventhttps://docs.spring.io/spring-data/rest/docs/current/reference/html/#events),可能会引起副作用。

必须有严格的父子关系。我认为您无法配置所需的行为。

本文链接:https://www.f2er.com/3169736.html

大家都在问