Hibernate 在JPQL查询中应用new map()函数以检索包含列详细信息的结果

Hibernate 在JPQL查询中应用new map()函数以检索包含列详细信息的结果,hibernate,spring-boot,jpa,spring-data-jpa,jpql,Hibernate,Spring Boot,Jpa,Spring Data Jpa,Jpql,我试图通过在SpringBootMicroService中应用JPQL查询来检索数据库示例结果。我使用JPQL查询按列检索结果集。添加所需列时,结果仅包含值。没有关于哪个列属于哪个列的信息,因为我是从Angular 2应用程序中获取这个结果的。所以我需要结果作为键值对 之后,当我在JPQL查询中添加带有别名的新map()函数时,它会正确地使用列进行检索 我的第一个代码是 @Query("select u.username, p.pname from Users u join u.priviJo

我试图通过在SpringBootMicroService中应用JPQL查询来检索数据库示例结果。我使用JPQL查询按列检索结果集。添加所需列时,结果仅包含值。没有关于哪个列属于哪个列的信息,因为我是从Angular 2应用程序中获取这个结果的。所以我需要结果作为键值对

之后,当我在JPQL查询中添加带有别名的新map()函数时,它会正确地使用列进行检索

我的第一个代码是

@Query("select u.username, p.pname  from Users u join u.priviJoin p where u.username = :uname")
    List<Users> findByUsername(@Param("uname") String uname);
@Query("select  new Map(u.username as username , p.pname as pname) from Users u join u.priviJoin p where u.username = :uname")
    List<Users> findByUsername(@Param("uname") String uname);
@Query(“选择u.username,p.pname from Users u join u.priviJoin p其中u.username=:uname”)
列出findByUsername(@Param(“uname”)字符串uname);
结果为-不包含列信息

[[“雅各布”,“管理员”]]

添加映射功能后,代码为

@Query("select u.username, p.pname  from Users u join u.priviJoin p where u.username = :uname")
    List<Users> findByUsername(@Param("uname") String uname);
@Query("select  new Map(u.username as username , p.pname as pname) from Users u join u.priviJoin p where u.username = :uname")
    List<Users> findByUsername(@Param("uname") String uname);
@Query(“从用户u join u.priviJoin p中选择新地图(u.username作为用户名,p.pname作为pname),其中u.username=:uname”)
列出findByUsername(@Param(“uname”)字符串uname);
结果为

@Query("select u.username, p.pname  from Users u join u.priviJoin p where u.username = :uname")
    List<Users> findByUsername(@Param("uname") String uname);
@Query("select  new Map(u.username as username , p.pname as pname) from Users u join u.priviJoin p where u.username = :uname")
    List<Users> findByUsername(@Param("uname") String uname);
[{“pname”:“Admin”,“username”:“jacob”}]

混淆-

  • 为什么在查询中添加map()函数后才获取列信息
  • map()函数在这里有什么用途
  • 为什么列不在第一个结果中检索
  • 注意-:第二个查询仅在表中存在映射/联接时才给出带列的结果。否则,第一个查询对于包含列信息的结果就足够了。只有在有连接功能时,我才被迫添加映射功能


    有人能澄清我的困惑吗?

    这三个问题是相同的,答案是:

    这就是
    Map
    函数的作用。

    普通查询总是以
    列表的形式仅返回所选的值,并且您必须按位置访问每一列


    使用地图功能,您可以获得一个列表,可以通过名称访问该列表。

    这三个问题是相同的,答案是:

    这就是
    Map
    函数的作用。

    普通查询总是以
    列表的形式仅返回所选的值,并且您必须按位置访问每一列


    使用map功能,您将获得一个列表,可以通过姓名访问该列表。

    谢谢您的回复,先生。我明白这一点。但只有当我的表具有联接关系时,才会发生这种情况。我的表具有一对多映射。若我并没有添加任何连接/映射,那个么我可以通过使用第一个查询正确地得到结果。问题是,只有在表中添加映射时才会发生这种情况。若并没有映射,那个么第一个查询就足以使用列信息检索结果。我的困惑是,为什么连接表会出现这种情况?谢谢您的回答,先生。我明白这一点。但只有当我的表具有联接关系时,才会发生这种情况。我的表具有一对多映射。若我并没有添加任何连接/映射,那个么我可以通过使用第一个查询正确地得到结果。问题是,只有在表中添加映射时才会发生这种情况。若并没有映射,那个么第一个查询就足以使用列信息检索结果。我的困惑是,为什么连接表会出现这种情况?JPQL没有这样的“映射”构造函数表达式,所以您可能需要编辑您的问题,并说这是JPA提供程序特定的,或者是Spring数据特定于JPA的,因为它不在JPA规范中。我只是这方面的初学者。我以为这是JPQL。那么我可以将其添加为HQL吗,既然JPQl是API标准,HQL是Hibernate实现?我可以这样编辑吗?谢谢你的回答Billy Frost.JPQL先生没有这样的“映射”构造函数表达式,所以也许你需要编辑你的问题,说这是JPA提供程序特定的,或者是Spring数据JPA特定的,因为它不在JPA规范中。明白了。我只是这方面的初学者。我以为这是JPQL。那么我可以将其添加为HQL吗,既然JPQl是API标准,HQL是Hibernate实现?我可以这样编辑吗?谢谢你的回复比利·弗罗斯特先生。