首页 > 解决方案 > JdbcTemplate.query 方法未维护列表中逗号分隔字符串的顺序

问题描述

我在 Oracle DB 中使用 xmlagg 聚合了行数,聚合后 445614935 id 的 DOB 也在 Person_DOB 列中排在首位,其他 id 也是如此。但是当我使用 JdbcTemplate 在 java 中获取这一行时,两个列值的顺序都不会保持。似乎它正在排序我想在列表中以相同的顺序获取数据,它在数据库中显示。

用于按 person_id 聚合的查询是

SELECT   rtrim(xmlagg(Xmlelement(e,person_id,',').extract('//text()') order BY person_id).getclobval(),',') AS person_id,
environment,
     rtrim(xmlagg(xmlelement(e,person_dob,',').extract('//text()') ORDER BY 
person_id).getclobval(),',')     AS person_dob 
FROM     ip_co_wr2_usr.person_details
WHERE    status='RFS' 
 GROUP BY environment, 
    ;

运行此查询后的预期是获取 person_id 和 DOB 将用“,”分隔,维护他们的关系顺序,这也在发生。P1,P2 --> Persion Id 和 dob_p1,dob_p2 --> 人的 DOB

但是当我们尝试使用 JdbcTemplate 在 Person Pojo 类中映射这一行时,属性 person_id 将作为 "P1,P2" 但 dob 属性作为 "dob_p2,dob_p1" 出现。它应该是“dob_p1,dob_p2”

  List<Person> triggersList = coJdbcTemplate.query(queryForTrigger,
                new BeanPropertyRowMapper<Person>(
                        Person.class));

在此处输入图像描述

标签: javaspringoraclejdbctemplaterowmapper

解决方案


推荐阅读