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

时间:2018-06-04 07:34:42

标签: hibernate spring-boot jpa spring-data-jpa jpql

我试图通过在spring boot微服务中应用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);

结果是 - 不包含列信息

[[&#34;雅各布&#34;&#34;联系&#34;]]

添加地图功能后,代码为

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

结果

[{&#34; PNAME&#34;:&#34;联系&#34;&#34;用户名&#34;:&#34;雅各布&#34;}]

混淆 -

  1. 为什么只有在查询中添加map()函数后才能获取列信息?
  2. 这里有map()函数的用途吗?
  3. 为什么列没有在第一个结果中检索?
  4. 注意 - :第二个查询仅在表中存在映射/连接时才为列提供结果。否则,第一个查询对于包含列信息的结果就足够了只有在加入功能时,我才被迫添加地图功能。

    有人可以澄清我的困惑吗?

1 个答案:

答案 0 :(得分:2)

这三个问题是一样的,答案是:

这就是Map功能的用途。

普通查询始终只返回以List<Object[]>形式选择的值,您必须按位置访问每列。

使用地图功能,您可以获得List<Map<String, Object>>,可以按名称访问。