gpt4 book ai didi

java - 如何将以对象为键的 map 列表转换为 map ?

转载 作者:行者123 更新时间:2023-12-04 13:34:15 31 4
gpt4 key购买 nike

我有一个返回 map 列表的存储库查询,如下所示:

@Query("SELECT new map(key(m), value(m) ) from User u join u.shopRoleMap m where u.usEmail = :email")
List<Map<Shop,Role>> findByUserEmail(String email);

在User上的映射如下:

@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinTable(name = "user_shop_role",
joinColumns = @JoinColumn(name = "user_fk"), inverseJoinColumns = @JoinColumn(name = "role_fk"))
@MapKeyJoinColumn(name = "shop_fk")
private Map<Shop, Role> shopRoleMap = new HashMap<>();

在我的服务中,我需要将 map 获取为 Map<Shop,Role>这样我就可以相应地获取键和值。代码如下:

List<Map<Shop,Role>> shopRole= userRepository.findByUserEmail(email);

for (Map<Shop,Role> map : shopRole){
for (Map.Entry<Shop,Role> result : map.entrySet()){
System.out.println("The key is: "+result.getKey());
System.out.println("And the value is: "+result.getValue());
}
}
}

如我所料,我得到的结果有点奇怪 result.getKey()会给我Shop作为关键。但是,我得到的 key 为 0 和 1。

The key is: 0
And the value is: Shop{id=54, sh_name='Frefdv', sh_icon='icon url', sh_description='Fashion Shop', sh_tag='metadata', uuid='99dba3d5-dfaa-446d-9649-b9b98f422f87', sh_enabled='N', created_at=2020-07-30T15:54:10, updated_at=2020-07-30T15:54:10, created_by='e0b009ef-27c2-405b-961a-86f199b15167', updated_by='e0b009ef-27c2-405b-961a-86f199b15167'}
The key is: 1
And the value is: Role{id=0, roleName='ADMIN'}
The key is: 0
And the value is: Shop{id=55, sh_name='fnhfh', sh_icon='icon url', sh_description='Fashion Shop', sh_tag='metadata', uuid='e3ccdbdf-aad2-43ba-8331-91b2c2c01853', sh_enabled='N', created_at=2020-07-30T15:54:23, updated_at=2020-07-30T15:54:23, created_by='e0b009ef-27c2-405b-961a-86f199b15167', updated_by='e0b009ef-27c2-405b-961a-86f199b15167'}
The key is: 1
And the value is: Role{id=0, roleName='ADMIN'}

我如何转换这个 List<Map<Shop,Role>>到我可以获得键值对的 map ?

最佳答案

有问题的 HQL 实际上返回 List >

SELECT new map(key(m), value(m) ) from User u join u.shopRoleMap m where u.usEmail = :email

new map 的语法基本上需要值。因此,当将 key(m) 和 value(m) 传递给它时,key(m) 和 value(m) 将被视为 Map 值。 map 的关键基本上是索引值(0,1,2,..)

您可以在 Hibernate 文档中阅读更多相关信息 - https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#hql-select-clause

enter image description here

因此,您应该将 HQL 替换为

SELECT entry(m) from User u join u.shopRoleMap m where u.usEmail = :email

这应该返回 List > 可以对其进行迭代以获得正确的结果。

关于java - 如何将以对象为键的 map 列表转换为 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63179341/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com