Spring JDBCTemplate检索对象的集合,每个对象也都有自己的集合

时间:2018-08-13 16:26:46

标签: collections jdbctemplate

我知道如何使用该类中的方法使用Spring JdbcTemplate处理和返回对象集合。我的问题是集合中的对象也有自己的集合。因此,我的常规RowMapper方法无法实现。

环境:Java 8,Spring 4.x,Tomcat,Oracle。

我有:

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

Public Class Child{
String name;
int age;
long id
}

我想回来
列出这样的人

List index    --- ---------- contents
0--> Hunan1 {child1, child2, child3}  -- has three three
1--> Human2 {} – has no child
2--> Human3{childx, childy} – has 2 children 

我的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层中一次完成所有操作,同时处理转结果。我该如何实现?

1 个答案:

答案 0 :(得分:0)

无法在RowMapper的{​​{1}}中执行此操作。您需要做的是在Human上加载Children的ID,然后编写一个单独的方法,该方法执行单独的数据库调用以检索具有这些ID的Human并将它们加载到{ {1}}。