在 JPQL 查询中应用新的 map() 函数以检索包含列详细信息的结果
Applying new map() function in JPQL query to retrieve result with column details
我正在尝试通过在 spring 启动微服务中应用 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);
结果是 - 不包含列信息
[["jacob","Admin"]]
添加地图功能后,代码为,
@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() 函数有什么用?
- 为什么第一个结果中没有检索到列?
注意-: 第二个查询仅当表中有 mapping/joining 时才给出带列的结果。否则,对于包含列信息的结果,第一个查询就足够了。只有在有连接功能时,我才被迫添加地图功能。
谁能澄清我的困惑?
这三个问题是一样的,答案是:
这就是 Map
函数的用途。
正常查询总是return仅以List<Object[]>
形式选择的值,您必须按位置访问每一列。
使用 map 函数你会得到一个 List<Map<String, Object>>
可以通过名称访问。
我正在尝试通过在 spring 启动微服务中应用 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);
结果是 - 不包含列信息
[["jacob","Admin"]]
添加地图功能后,代码为,
@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() 函数有什么用?
- 为什么第一个结果中没有检索到列?
注意-: 第二个查询仅当表中有 mapping/joining 时才给出带列的结果。否则,对于包含列信息的结果,第一个查询就足够了。只有在有连接功能时,我才被迫添加地图功能。
谁能澄清我的困惑?
这三个问题是一样的,答案是:
这就是 Map
函数的用途。
正常查询总是return仅以List<Object[]>
形式选择的值,您必须按位置访问每一列。
使用 map 函数你会得到一个 List<Map<String, Object>>
可以通过名称访问。