![](/img/trans.png)
[英]Spring-data-rest NullPointerException on OneToMany relationship
[英]How to add an object in a OneToMany relationship using Spring Data REST
当未导出映射类REST Repository时,我无法弄清楚如何使用Spring-Data REST将对象添加到OneToMany关系。
我有两个班, Question
和Answer
。 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.