@Query("select new map( ques_res.id , qbe.comment ) " +
"from SurveyResponseAnswerComments qbe " +
"left join SurveyQuestionnaireResponse ques_res on qbe.queResponseId = ques_res.id " +
"where ques_res.questionnaireId = :questionnaireId " +
"and ques_res.inviteeId = :employeeId " +
"and qbe.tenant.id = :tenantId " +
"and ques_res.id IN (:responseIds)")
List<Map<Integer, String>> getCommentsBasedOnQuestionnaireIdEmployeeIdAndResponseIdListMap(
@Param("questionnaireId") Integer questionnaireId,
@Param("employeeId") Integer employeeId,
@Param("responseIds") List<Integer> responseIds,
@Param("tenantId") Integer tenantId);
上面的查询返回一个map列表,其中每个map包含两个子map,其中第一个子map具有key ->“0”和value -> ques_res.id,第二个子map包含key ->“1”和value -> qbe.comment,但我想要的是查询返回一个map列表,其中每个map只包含一个key-value对,key应该是ques_res.id,value应该是comment。
注意:我已经尝试了下面的jpql查询,但仍然dint获取预期的结果
1条答案
按热度按时间uplii1fm1#
您希望简化查询返回的Map。你想要一个只有一个键值对的Map:'ques_res.id'作为键,'qbe.comment'作为值。你不需要在select子句中使用'new map'。相反,您可以直接选择这两列并将其用作Map。
考虑对JPQL查询进行以下修改:
在此更新版本中,'ques_res.id'被赋予别名'id','qbe.comment'被赋予别名'comment'。结果应该返回一个Map列表,其中每个Map都以id作为键,以注解作为值。
请记住,Map的键由您在select语句中设置的别名确定。在这里,我们使用了“id”和“comment”。如果您希望键只是'ques_res.id'而没有别名,则需要实现适当的结果Map策略。
最后,请记住,查询的输出可能会因您使用的JPA实现而异。如果结果不符合您的期望,您可能需要在Java中进行处理,以将其转换为所需的格式。