엔티티 "영화"와 엔티티 "클립"이 있습니다 각 클립은 하나의 영화에 속하며 영화에는 여러 클립이있을 수 있습니다.Hibernate @OneToMany 관계로 인해 JSON의 무한 루프 또는 빈 항목이 생깁니다.
Movie.java
@OneToMany(mappedBy = "movie", targetEntity = Clip.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Clip> clips = new HashSet<Clip>();
Clip.java
@ManyToOne
@JoinColumn(name="movie_id")
private Movie movie;
테이블 생성되고 있으며, 각 클립 열 "movie_id"을 가지고 있지만 이것은 내가 데이터
요청있을 때 무한 루프에 결국 내 응용 프로그램을 발생합니다내 코드처럼 보이는
@Path("/{id:[0-9][0-9]*}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Movie lookupMovieById(@PathParam("id") long id) {
return em.find(Movie.class, id);
}
result:
{"id":1,"version":1,"name":"MGS Walkthrough","filename":"video.mp4","movieCategories":[{"id":1,"version":1,"name":"Walkthrough"}],"clips":[{"id":1,"version":1,"name":"MGS Walkthrough P1","keywords":null,"movie":{"id":1,"version":1,"name":"MGS Walkthrough","filename":"video.mp4","movieCategories":[{"id":1,"version":1,"name":"Walkthrough"}],"clips":[{"id":1,"version":1,"name":"MGS Walkthrough P1","keywords":null,"movie":{"id":1,"version":1,"name":"MGS Walkthrough","filename":"video.mp4","movieCategories":[{"id":1,"version":1,"name":"Walkthrough"}],"clips":[{"id":1,"version":1,"name":"M...
클립을 요청할 때와 같은 결과입니다.
@ManyToMany 관계로 변경하면 아무런 문제가 없지만 여기에 필요한 것은 아닙니다. 나 좀 도와 줄 수있어? fetchType을 Lazy로 설정하면 작동하지 않습니다.
편집 : 현재 JBoss의 개발 스튜디오를 사용하고
편집 :
나는 "해결"이이 문서 읽어 :
http://blog.jonasbandi.net/2009/02/help-needed-mapping-bidirectional-list.html
"양방향 매핑하기를 one to many 측면을 소유 측으로 사용하는 경우 mappedBy 요소를 제거하고 삽입 가능 및 업데이트 가능으로 many to one @JoinColumn을 false로 설정해야합니다.이 솔루션은 분명 최적화되지 않았으며 일부 추가 기능을 생성합니다 itional UPDATE 문. "
나는 나는 다음과 같은 답변을 얻을 영화 요청할 때 :
{ "ID를"1 "버전": 1, "이름": "MGS 연습", "파일 이름": "video.mp4" , "movieCategories": [{ "id": 1, "version": 1, "이름": "연습"}], "클립": [], "설명": "예고편 zu mgs4"}
"클립"항목이 계속 나타납니다. 이것은 여전히 잘못된 해결책입니까 아니면 이걸로 그냥 살아야합니까?
업데이트가 정말 도움이되었습니다. – elysch
게터를 제거하면 제 문제가 해결되었습니다. 감사! –
내 업데이트가 저장되었습니다. – SuperGirl