mysql - Spring Data REST 多对多失败:一对多工作
问题描述
我有两个带有 Spring Data REST 的实体:在多对多关系中“阶段”父和“订阅”子。我使用这篇文章作为参考:https ://www.baeldung.com/spring-data-rest-relationships
阶段实体:
@ManyToMany
@JoinTable(name = "phases_subscriptions",
joinColumns = @JoinColumn(name = "phase_id"),
inverseJoinColumns = @JoinColumn(name = "subscription_id"))
@Getter @Setter
private List<Subscription> subscriptions;
订阅实体:
@ManyToMany(mappedBy = "subscriptions")
@Getter @Setter
private List<Phase> phases;
订阅.sql
phase int,
CONSTRAINT fk_subscription_phase FOREIGN KEY subscriptionPhase (phase)
REFERENCES phase (id) ON DELETE CASCADE ON UPDATE CASCADE
有了这些,我得到了以下结果:
- GET http://localhost:8080/subscriptions/ 创建订阅
- GET http://localhost:8080/phases/ 创建阶段
- 在终端上(不是在邮递员上) curl -i -X PUT -H "Content-Type:text/uri-list" --data-binary "http://localhost:8080/subscriptions/1" http://localhost: 8080/phases/1/subscriptions 订阅 1 现在与阶段 1 建立关系
- GET http://localhost:8080/phases/1/subscriptions 我得到了订阅 1
- GET http://localhost:8080/subscriptions/1/phases 我得到了第一阶段
现在的问题:
- 如果我尝试向阶段添加第二个订阅,我只是覆盖,现在只有订阅 2 具有关系
- 只有表(由 spring 创建)phases_subscriptions 有两个 id,在订阅表中它在阶段列中仍然是 NULL
- 我还想使用邮递员来创建这些新关系,例如我可以在一对多中使用: PATCH {"phases": "phase 1 URL"} at Subscription 1 URL
解决方案
我只解决了将 HTTP 动词从 PUT 更改为 PATCH,如下所示: curl -i -X PATCH -H "Content-Type:text/uri-list" --data-binary "http://localhost:8080/subscriptions/ 2" http://localhost:8080/phases/1/subscriptions
推荐阅读
- javascript - 如何在选择选项中使用 jQuery 隐藏效果
- jquery - 如何在包含 iframe 的 li 上触发点击功能?
- sql - 计算postgres中没有假期的总时间
- android - Android API 29 - 检查是否连接到蜂窝网络
- kubernetes - How does an external load balancer learn of istio ingress gateways
- html - 变换/缩放无法适当缩放背景附件已修复
- javascript - 我想在单击关闭按钮 Angular 6 后隐藏 div
- ios - 使用 value(forKey: String) 会出错
- html - FO 列表块更改样式
- javascript - 为什么我的 Ajax 请求后没有客户端响应?