java 如何从数据库中只获取id和注解,返回类型应该是List< Map< Integer,String>>

5f0d552i  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(174)
@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获取预期的结果

uplii1fm

uplii1fm1#

您希望简化查询返回的Map。你想要一个只有一个键值对的Map:'ques_res.id'作为键,'qbe.comment'作为值。你不需要在select子句中使用'new map'。相反,您可以直接选择这两列并将其用作Map。
考虑对JPQL查询进行以下修改:

@Query("select new map( ques_res.id as id, qbe.comment as 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);

在此更新版本中,'ques_res.id'被赋予别名'id','qbe.comment'被赋予别名'comment'。结果应该返回一个Map列表,其中每个Map都以id作为键,以注解作为值。
请记住,Map的键由您在select语句中设置的别名确定。在这里,我们使用了“id”和“comment”。如果您希望键只是'ques_res.id'而没有别名,则需要实现适当的结果Map策略。
最后,请记住,查询的输出可能会因您使用的JPA实现而异。如果结果不符合您的期望,您可能需要在Java中进行处理,以将其转换为所需的格式。

相关问题