问个简单的 JPA 的问题

2020-02-06 11:28:49 +08:00
 hello2060

假设我有两个 entirty: User, Post

一个 post 只能有一个 user, 一个 user 可以有多个 post

所以

class Post {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    User poster;
}

class User {
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "poster")
    List<Post> posts;
}

但是这样的话 findAll post 出来 post 里面有 user, user 里面有 list<post> 一堆嵌套了</post>

那正常应该怎么处理?谢谢

2733 次点击
所在节点    Java
5 条回复
lxk11153
2020-02-06 11:42:00 +08:00
好像是那种根据主键关联的+FetchType.LAZY,会在需要时才取值
还有配置 hibernate.enable_lazy_load_no_trans
reidxx
2020-02-06 11:46:34 +08:00
在 post 端关联,user 端不要做关联,需要 post 列表使用单独的查询
oneisall8955
2020-02-06 12:47:00 +08:00
懒加载情况下,调用 get 才查询吧。另外 2 楼方法也可取
hello2060
2020-02-06 13:26:10 +08:00
@reidxx 谢谢,看了几篇文章都推荐你这个做法,谢谢啦
xDaShen
2020-02-06 14:43:38 +08:00
我一般在 @OneToMany 方做关联,@ManyToOne 不做关联。所以对应楼主的情况,在 post 方将 poster 变量替换为 userId,去除注解,在 User 方去除 mappedBy 并添加 @JoinColumn(name = "userId")

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/642471

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX