エンティティ「ムービー」とエンティティ「クリップ」 各クリップは1つのムービーに属し、ムービーには複数のクリップが含まれます。Hibernate @OneToManyの関係が原因でJSON結果の無限ループまたは空のエントリが返される
私のコードは次のようになります。テーブルが生成され、各クリップが列「movie_id」を持っていますが、これは私がデータ
を要求していたときに私のアプリケーションが無限ループで終わるになり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;
@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に設定しても機能しませんでした。
編集:私はこの記事を読んで、これを "解決"
:
http://blog.jonasbandi.net/2009/02/help-needed-mapping-bidirectional-list.html
を「双方向をマップするには、私は現在のJBossの開発スタジオに
Editを使用しています1対多の、1対多のサイドを所有サイドとして使用する場合は、mappedBy要素を削除し、many to one @JoinColumnをinsertableおよびupdatableとしてfalseに設定する必要があります。 itional UPDATEステートメント。 "
私は映画を要求したとき、私は次のような答えを得る: "名前" 1: "MGSチュートリアル"、 "ファイル名": "video.mp4" を
{ "ID":1、 "バージョン" 、 "movieCategories":[{"id":1、 "version":1、 "name": "ウォークスルー"}]、 "クリップ":[]、 "description": "Trailer zu mgs4"}
エントリ「クリップ」が表示されます。これはまだ間違った解決策ですか、それとも私はこのままで生きなければなりませんか?
あなたのアップデートが本当に助けてくれました – elysch
ゲッターを削除すると私の問題が解決しました。ありがとう! –
更新が保存されました! – SuperGirl