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;

正在生成表,每个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...

当我请求剪辑时,结果相同。

当我将其更改为@ManyToMany关系时,不会有类似的问题,但这不是我所需要的。你能帮助我吗?将fetchType设置为Lazy无效。

编辑:我正在使用当前的JBoss开发工作室

编辑:

通过阅读本文,我“解决”了这一问题:

http://blog.jonasbandi.net/2009/02/help-needed-mapping-bidirectional-

list.html

“要以一对多的一侧为拥有侧来映射双向一对多,您必须删除mapledBy元素,并将多对一设置为可插入且可更新为false的@JoinColumn。显然,此解决方案未优化并会产生一些其他的UPDATE语句。”

当我请求电影时,我得到以下答案:

{“ id”:1,“版本”:1,“名称”:“ MGS演练”,“文件名”:“ video.mp4”,“电影类别”:[{“ id”:1,“版本”:1, “

name”:“演练”}],“片段”:[],“描述”:“ Trailer zu mgs4”}

条目“剪辑”仍然出现。这仍然是错误的解决方案,还是我只能忍受这个?

回答:

我遇到了完全相同的问题。我尝试了引用的段落中的解决方案,但它对我不起作用。

我所做的是在Clip类中为getMovie()返回null,然后无限循环问题消失了。以JSON格式返回的数据看起来像{“ movieId”:1 …

clips:[“ clipId”:1,“ movie”:“ null”,..]}。

如果您还想进一步删除JSON中的movie属性,则将类级注释添加到Clip类@JsonSerialize(include =

JsonSerialize.Inclusion.NON_NULL)

杰克逊功能:防止空值,默认值的序列化

更新:我发现更简单的方法是简单地删除Clip类中的电影吸气剂。

以上是 Hibernate @OneToMany关系导致JSON结果无限循环或空条目 的全部内容, 来源链接: utcz.com/qa/401298.html

回到顶部