![](/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.