Collections SpringJDBCTemplate检索对象集合,每个对象都有自己的集合

Collections SpringJDBCTemplate检索对象集合,每个对象都有自己的集合,collections,jdbctemplate,Collections,Jdbctemplate,我知道如何使用SpringJDBCTemplate使用该类中的方法处理和返回对象集合。我的问题是我的集合中的对象也有自己的集合。因此,我的常规RowMapper方法并没有削减它 环境:Java8、Spring4.x、Tomcat、Oracle 我有: Public class Human{ String name; Long id List<Child> children; } Public Class Child{ String name; int age; long id }

我知道如何使用SpringJDBCTemplate使用该类中的方法处理和返回对象集合。我的问题是我的集合中的对象也有自己的集合。因此,我的常规RowMapper方法并没有削减它

环境:Java8、Spring4.x、Tomcat、Oracle

我有:

Public class Human{
String name;
Long id
List<Child> children;
}

Public Class Child{
String name;
int age;
long id
}
我的Oracle表如下所示:

Human
Id  Name    address
1   James   123 Main street
2   Bob 246 Broad street
3   Tiger   850 First street

Child
Id  Name    age
5   Dave    10
7   Lille   15


Human_Child
HumanId ChildId xzy
1   5   
1   7   
2   5   
3   0


SQL
SELECT  hm.id, hm.name, ch.id, chi.name
FROM HUMAN hm
left outer JOIN HUMAN_CHILDREN hm_ch ON hm_ch.id = hm.id
left outer JOIN CHILD ch ON ch.id = hm_ch.id

ResultSet
humanId HumanName   ChildId ChildName
1   James   5   Dave
1   James   7   Lille
2   Bob 5   Dave
3   Tiger   Null    null

我想让詹姆斯成为我清单中的一个对象,但詹姆斯应该有一个清单,上面有他的两个孩子,如前所述。我想我可以返回一个包含重复人员的列表,并使用一个映射来创建子列表,但这将是太多的循环-我只想在处理结果集时在DAO层中一次完成所有操作。如何实现这一点?

人类的
行映射器中不可能实现这一点。您需要做的是在
人类
上加载
儿童
的ID,然后编写一个单独的方法,执行单独的db调用,用这些ID检索
儿童
,并将其加载到
人类

谢谢,Mohammed。与一次性加载(humnan和children)并在Java端查找子集合相比,进行两次DB调用(一次用于人,另一次用于儿童)是否是更好的方法?@mgibson不确定如何执行一次DB调用,您很可能必须执行两次。一个用来装载人类,然后另一个用来检索相关的孩子。如果资源竞争是一个问题,您需要考虑使用从您调用的方法的<代码> @事务性< /代码>注释。这确保了所有数据库事务都使用单个连接。
Human
Id  Name    address
1   James   123 Main street
2   Bob 246 Broad street
3   Tiger   850 First street

Child
Id  Name    age
5   Dave    10
7   Lille   15


Human_Child
HumanId ChildId xzy
1   5   
1   7   
2   5   
3   0


SQL
SELECT  hm.id, hm.name, ch.id, chi.name
FROM HUMAN hm
left outer JOIN HUMAN_CHILDREN hm_ch ON hm_ch.id = hm.id
left outer JOIN CHILD ch ON ch.id = hm_ch.id

ResultSet
humanId HumanName   ChildId ChildName
1   James   5   Dave
1   James   7   Lille
2   Bob 5   Dave
3   Tiger   Null    null