我有两个实体,一个实体“电影”和一个实体“剪辑”,每个剪辑属于一部电影,一部电影可以有多个剪辑。
我的代码如下所示:
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。此解决方案显然未优化并且会产生一些额外的 UPDATE 语句。”
当我请求一部电影时,我得到以下答案:
{"id":1,"version":1,"name":"MGS Walkthrough","filename":"video.mp4","movieCategories":[{"id":1,"version":1, "name":"Walkthrough"}],"clips":[],"description":"Trailer zu mgs4"}
条目“剪辑”仍然出现。这仍然是错误的解决方案还是我只能忍受这个?