繁体   English   中英

如何使用Spring Data REST在OneToMany关系中添加对象

[英]How to add an object in a OneToMany relationship using Spring Data REST

当未导出映射类REST Repository时,我无法弄清楚如何使用Spring-Data REST将对象添加到OneToMany关系。

我有两个班, QuestionAnswer Question有一个成员变量定义如下:

@OneToMany(mappedBy = "answer", cascade=CascadeType.ALL, orphanRemoval = true)
@LazyCollection(LazyCollectionOption.FALSE) 
private List<Answer> answers = new LinkedList<Answer>();

Answer映射回Question如下:

@NotNull
@ManyToOne(targetEntity = Question.class)
@JoinColumn(name = "question_id", referencedColumnName = "id") 
private Question question;

由于Answer对象仅与其所属的Question相关,因此我已禁用导出REST存储库:

@RestResource(exported = false)
public interface AnswerRepository extends JpaRepository<Answer, Long> {}

当我在这里提问时: http://localhost:9090/data/questions/7 ,我得到这样的东西:

{
    "creationDate": "2014-09-26T06:36:44.000+0000",
    "modificationDate": "2014-09-26T06:36:44.000+0000",
    "answers": [],
    "_links": {
        "self": {
            "href": "http://localhost:9090/data/questions/7"
        }
    }
}

到现在为止还挺好。 现在我想添加一个这样的答案:

curl -v -X PUT -H "Content-Type: application/json" \
    -d "{"answers": [{"value": "Red"}]}" http://localhost:9090/data/questions/7

不幸的是,此时我收到以下错误:

拥有实体实例不再引用具有cascade = \\“all-delete-orphan \\”的集合:com.example.Question.answers

对StackOverflow的简要搜索表明上述错误是由于将您的集合替换为另一个集合而导致的错误,孤立于之前的集合。 由于所有这些代码都由Spring管理,我没有看到如何操纵我的对象来避免这个问题。

这个问题是类似的,但不同的是,在这种情况下,存储库不会被导出,而在那个问题中它是。

如果您正在使用PUT ,则应该发送 text/uri-list媒体类型。 但我不看你会怎么做,因为你没有出口Answer仓库所以你不能叫POST第一就可以了。

你试过PATCH吗? 尽管如此......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM