如何查询/表示列表页面中的1对多信息

Rpj*_*Rpj 7 java mysql hibernate

如何查询/表示列表页面中的1对多信息

create users (id, name, ...)
create user_tags (id, user_id, tag_name)

user has 1 to many user_tags
Run Code Online (Sandbox Code Playgroud)

示例数据 - 我希望将表呈现为

user1 tag1,tag2
user2 tag3
user3 tag1
user4
user5 tag5,tag6.tag7
Run Code Online (Sandbox Code Playgroud)

为了构造上表,我必须执行以下操作来构造每一行.

i.e.
select * from users;
for (User user : users) {
  // select tag_name from user_tags where user_id = user.id
  List<Tag> tags = fetchtags(user)
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来获取 用户的缓存标记,因此构建上述用户列表不需要更长的时间.

fri*_*fle 2

您的方法中的主要性能问题是查询数据库N+1时间。一次用于所有用户,N 次用于用户标签(N 是用户数量)。您应该使用一个 select 语句来连接两个表。

既然你用我的标签标记了你的问题,hibernate我想你使用了某种 JPA。JPA 中的关键字是JOIN FETCH。一个相关的问题可能是这个