我有兩個實體,一個實體「電影」和一個實體「Clip」 每個片段屬於一個電影,而電影可以有多個片段。Hibernate @OneToMany Relationship在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
「要映射雙向一對多,一對多作爲擁有者,你必須刪除mappedBy元素,並將多個@JoinColumn設置爲可插入和可更新爲false。這個解決方案顯然不是最優化的,並且會產生一些添加更新語句「。
,當我要求電影我得到以下答案:
{ 「ID」:1, 「版本」:1, 「名」: 「MGS演練」, 「文件名」: 「video.mp4」 ,「movieCategories」:[{「id」:1,「version」:1,「name」:「Walkthrough」}],「clips」:[],「description」:「Trailer zu mgs4」}
條目「剪輯」仍然出現。這仍然是錯誤的解決方案,還是我必須忍受這一點?
你的更新真的幫了我 – elysch
刪除getter解決了我的問題。謝謝! –
您的更新保存了我的一天! – SuperGirl