2014-10-09 2 views
4

Не могу понять, как добавить объект к отношениям OneToMany, используя REST-Data REST, когда сопоставленные классы REST Repository не экспортируются.Как добавить объект в отношения OneToMany с использованием Spring Data REST

У меня есть два класса, 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 

К сожалению, на данный момент я получаю следующее сообщение об ошибке:

A collection with cascade=\"all-delete-orphan\" was no longer referenced by the owning entity instance: com.example.Question.answers

Краткий поиск StackOverflow указывает выше ошибка вызвана заменой коллекции с другой, осиротевшей предыдущую коллекцию. Поскольку весь этот код управляется Spring, я не вижу, как манипулировать моими объектами, чтобы избежать этой проблемы.

This question похоже, однако разница в том, что в этом случае репозиторий не экспортируется, в то время как в этом вопросе он есть.

+0

Я решил эту проблему, написав пользовательский контроллер для обработки POST на http: // localhost: 9090/data/questions/7/answers, но я не считаю, что ответьте на этот вопрос. – JBCP

+0

Не нужно использовать собственный контроллер. Ваша команда не добавляет ответ, кстати. – zeroflagL

+0

Я согласен, что это не обязательно, но у меня нет другого решения. Вы имеете в виду, что мой комментарий не добавляет ответа? Это потому, что я не считаю это ответом на вопрос. – JBCP

ответ

0

Если вы используете PUT вы should be sendingtext/uri-list тип носителя. Но я не понимаю, как бы вы это делали, так как вы не экспортировали репозиторий Answer, поэтому вы не можете называть его POST.

Вы попробовали PATCH? Это не документировано, но ...

 Смежные вопросы

  • Нет связанных вопросов^_^