我有两个实体,一个实体"电影"和一个实体"剪辑"每个剪辑属于一个电影,一个电影可以有多个剪辑.
我的代码看起来像:
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;
Run Code Online (Sandbox Code Playgroud)
正在生成表,每个Clip都有一个列"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...
Run Code Online (Sandbox Code Playgroud)
当我请求剪辑时,结果相同.
当我将它改为@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, "名称":"演练"}],"剪辑":[],"说明":"预告片zu mgs4"}
条目"剪辑"仍然出现.这仍然是错误的解决方案还是我必须忍受这个?