2014-10-09 1 views
4

매핑 된 클래스 REST Repository를 내보낼 때 Spring-Data REST를 사용하여 OneToMany 관계에 객체를 추가하는 방법을 알 수 없습니다.Spring 데이터를 사용하여 OneToMany 관계에 객체를 추가하는 방법 REST

두 클래스, QuestionAnswer이 있습니다.

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

그리고 Answer이 같은 Question 다시 매핑 : 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" 
     } 
    } 
} 

지금까지는 그렇게 좋았습니다. 지금은 같은 대답을 추가 할 : StackOverflow에 대한 간단한 검색 위의 오류가 컬렉션을 교체로 인해 발생 나타냅니다

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

:

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

불행하게도,이 시점에서 나는 다음과 같은 오류가 다른 하나는 이전 컬렉션을 고아로 만듭니다. 이 코드는 모두 Spring에서 관리하므로이 문제를 피하기 위해 객체를 조작하는 방법을 알지 못합니다.

This question과 비슷하지만 차이점은이 경우 리포지토리가 내보내지지 않는다는 것입니다.

+0

http : // localhost : 9090/data/questions/7/answers에 대한 POST를 처리하기 위해 사용자 정의 컨트롤러를 작성하여이 문제를 해결했습니다. 이 질문에 대한 대답. – JBCP

+0

자체 컨트롤러를 구현할 필요는 없습니다. 귀하의 명령은 대답을 추가하지 않습니다. – zeroflagL

+0

나는 그것이 필요하지 않아야한다는 데 동의하지만 다른 해결책이 없습니다. 내 의견에 대답이 추가되지 않는다는 뜻입니까? 그 질문에 대한 대답이라고 생각하지 않기 때문입니다. – JBCP

답변

0

PUT을 사용하는 경우 should be sendingtext/uri-list 미디어 유형입니다. 하지만 Answer 리포 지 토리를 내보낼 수 없으므로 어떻게하면 좋을지 모르겠다. 따라서 POST을 먼저 호출 할 수는 없다.

PATCH을 사용해 보셨습니까? 그래도 그런 식으로 문서화되지 않았습니다 ...

관련 문제