Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将对象作为键的映射列表转换为映射?_Java_Hibernate_Jpa - Fatal编程技术网

Java 如何将对象作为键的映射列表转换为映射?

Java 如何将对象作为键的映射列表转换为映射?,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个存储库查询,它返回一个地图列表,如下所示: @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); @ManyToMany(cascade = {CascadeType.MERGE,

我有一个存储库查询,它返回一个地图列表,如下所示:

@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);
@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<>();
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());
            }
        }
        }

如何将此
列表
转换为可以获取键值对的映射?

所讨论的HQL实际上正在返回列表

新映射的语法基本上需要这些值。因此,当键(m)和值(m)被传递给它时,键(m)和值(m)被视为映射值。映射的键基本上是索引值(0,1,2,…)

您可以在Hibernate文档中阅读更多关于它的信息-

因此,您应该将HQL替换为

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

这将返回列表,可以通过迭代获得正确的结果。

我没有否决你的问题。但是它被标记了,因为它有3个问题,为了让文章集中注意力,只需留下一个问题,这是指导方针之一。而且,如果jpa返回的字符串非常值得删除,java流在这里也不能做任何事情。如果您的shopRole实际上是一个列表,那么嵌套的for循环和流就可以了。根据你的输出和错误判断,我认为可以安全地假设shopRole实际上是其他角色。不幸的是,我对JPA/HQL不够熟悉,无法在这里为您提供帮助,但我建议您使用调试器来查看实际得到的内容,并从中进行工作。@Rick很遗憾,推导出的映射键不是Shop类型。我不知道代码在哪里被弄乱了。@KavithakaranKanapathippillai谢谢你的欢呼。我已经编辑好了,让这个问题变得好学。你能在
User
&
shopRoleMap
SELECT new map(key(m), value(m) ) from User u join u.shopRoleMap m where u.usEmail = :email
SELECT entry(m) from User u join u.shopRoleMap m where u.usEmail = :email