当前位置: 首页 > 知识库问答 >
问题:

如何在列表页面中查询/表示一对多信息

邹华皓
2023-03-14

如何在列表页面中查询/表示一对多信息

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

user has 1 to many user_tags

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

user1 tag1,tag2
user2 tag3
user3 tag1
user4
user5 tag5,tag6.tag7

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

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)
}

是否有更好的方法为用户获取|缓存标记,这样就不需要花费更长的时间来构建上述用户列表。

共有3个答案

韩彦君
2023-03-14

如果我没弄错的话,你看的其实是很多种关系。一个用户可以有多个标签,一个标签可以被多个用户使用。让您困惑的是,您试图将映射也映射到JoinTable,而您可以在实体中执行以下操作:

标签实体:

@ManyToMany
    @JoinTable(
        name = "user_tags",
        joinColumns = { @JoinColumn(name = "tag_name") },
        inverseJoinColumns = { @JoinColumn(name = "user_id") })
    private List<User>     users= new ArrayList<>();

用户实体:

   @ManyToMany
    @JoinTable(name = "user_tags", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "tag_name") })
    private List<Tag> productionLines = new ArrayList<Tag>();

正如您所见,在这种情况下,您不必处理联接表。我可能在这里输入了一个错别字,所以你可以在谷歌上找到更多的例子,或者在这里找到“hibernate Manytomy JoinTable example”关键字

端木阳荣
2023-03-14

这是简单的SELECTGROUP_CONCAT()

SELECT u.name,GROUP_CONCAT(DISTINCT tag_name) AS tags 
FROM users u
LEFT JOIN user_tags t ON (t.user_id=u.id)
GROUP BY u.name;
乐正峰
2023-03-14

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

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

 类似资料:
  • 问题内容: 给定这种表结构,我想弄平多对多关系,并将一个表的“名称”字段中的值转换为列标题,并将同一表中的数量转换为列值。当前可行的想法是将值放入Dictionary(哈希表)中并以代码表示此数据,但我想知道是否存在SQL方式来执行此操作。我还将Linq- to-SQL用于数据访问,因此Linq-to-SQL解决方案将是理想的选择。 [TableA](整数ID) [TableB](整数ID,字符串

  • 问题内容: 我有桌子: 我想写一个返回BookName,FirstName,LastName,RubricName的SELECT查询。 我有两个单独的查询,但我不知道如何在一个选择中编写此查询。这就是我得到的: 它工作正常,但如何在一个选择中编写? 我尝试这样做,但是不起作用: 它返回错误: 问题答案: 试试这个查询

  • 接口说明 分页查询团队用户信息列表 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /permissions/api/team/user/v1.0.0/listPage 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN verify string

  • 接口说明 分页查询团队用户信息列表 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /permissions/api/team/user/v

  • 我有一个名为ArtWork的实体,该实体具有属性列表 样式具有称为标题的属性 我需要一个Hibernate查询,返回所有具有style title=“Abstract”的艺术品 -谢谢你的帮助

  • 我正在创建一个strutsHibernate应用程序。我使用hibernate查询获得了一个列表,并将其传递到action类中。但我不知道如何在JSP中显示它。 我已经在查询的基础上成功地得到了列表。现在我想用JSP显示这个列表。 我已经发布了<code>支柱。xml和用于显示结果的JSP。请检查。但在JSP中没有显示任何内容。我使用来显示列表。但没有运气。甚至我也尝试过在下打印简单文本,只是为了