如何使用Spring Data REST在一对多关系中添加对象。
如何使用Spring Data REST在一对多关系中添加对象。
我无法弄清楚如何在Spring-Data REST中将对象添加到OneToMany关系中,当映射的类的REST存储库未导出时。
我有两个类,Question和Answer。Question有一个成员变量定义如下:
@OneToMany(mappedBy = "answer", cascade=CascadeType.ALL, orphanRemoval = true)
@LazyCollection(LazyCollectionOption.FALSE)
private List
而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
当我在这里获取一个问题: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
不幸的是,此时我会得到以下错误:
A collection with cascade=\"all-delete-orphan\" was no longer
referenced by the owning entity instance: com.example.Question.answers
StackOverflow上的一个简短搜索表明上述错误是由用另一个集合替换你的集合而引起的,使以前的集合变成孤立的。由于所有这些代码都由Spring管理,我不知道如何操作我的对象以避免这个问题。
这个问题类似于这个问题,然而不同之处在于在这种情况下存储库未导出,在那个问题中是导出的。