【发布时间】:2023-03-09 15:51:01
【问题描述】:
我有两个实体,一个实体“电影”和一个实体“剪辑” 每个剪辑属于一部电影,而一部电影可以有多个剪辑。
我的代码如下:
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"}
“剪辑”条目仍然出现。这仍然是错误的解决方案还是我只能忍受这个?
【问题讨论】:
标签: json hibernate one-to-many hibernate-onetomany