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

标签 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);

结果是 - 不包含列信息

[["雅各布","管理员"]]

添加 map 功能后,代码为

@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"}]

困惑 -

  1. 为什么在查询中添加map()函数后才获取列信息?
  2. 这里的map()函数有什么用?
  3. 为什么在第一个结果中未检索到列?

注意-:仅当表中存在映射/连接时,第二个查询才会给出带有列的结果。否则,第一个查询足以获得包含列信息的结果。只有当有加入功能时我才不得不添加 map 功能。

谁能澄清我的困惑吗?

最佳答案

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

这就是Map功能是为了。

普通查询总是只返回以 List<Object[]> 形式选择的值并且您必须按位置访问每一列。

使用 map 功能,您会得到 List<Map<String, Object>>可以通过名称访问。

关于hibernate - 在 JPQL 查询中应用新的 map() 函数来检索包含列详细信息的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50675471/

相关文章:

hibernate - hibernate 中托管和非托管环境是什么意思?

java - JPA 继承映射多个实现

java - Spring:为什么要有多个缓存

Spring、JPA——测试抽象类

java - 如何修复: javax. persistence.TransactionRequiredException?

java - jpa hibernate复合外键映射

java - org.hibernate.Session 的 Save 方法未将数据保存在数据库中

spring - 如何在 Spring Cloud Config 中转义分支名称(标签)中的斜杠字符

使用 appication.yml/properties 具有不同属性配置的 Spring Boot Kafka 多个消费者

java - 此 sql 查询的 jpql 等效项(从国家字符查询)