我有3张桌子。主,child1,的child2。
Master与child1有一对多的关系。
Master与child2有一对多的关系。
child1和child2之间没有关系。
我想使用hibernate在单个查询中检索所有3个表中的数据。
Table - Master
id
11
12
Table - child1
id deposited_date Master_child1_reltion_key
2 2012-10-10 11
3 2012-10-10 11
4 2012-10-10 11
5 2011-01-01 12
6 2005-02-20 13
Table - child2
id phoneNo phone_type master_child2_relation_key
15 1111111 personal 11
16 2222222 office 11
17 3333333 home 11
18 1010100 personal 12
在表child2中,对于Master表可以有无,1,2或3条记录。
我想从所有3个表中检索值。像
id deposited_date phoneno1 phoneno2 phoneno3
11 2012-10-10 1111111 2222222 3333333
12 2011-01-01 1010100
13 2005-02-20
是否可以在hibernate中使用单个查询检索数据,还是需要使用多个查询?
答案 0 :(得分:1)
Select master from master master left join fetch master.child1 left join fetch master.child2
这会将master作为一个带有两个填充的子列表的根目录?
由于对id=13
的关注,我不明白你如何FK
不存在master
。
答案 1 :(得分:1)
您可以使用Criteria从所有3个表中获取数据,如下所示:
Criteria crit = session.createCriteria(Master.class);
crit.setFetchMode("child1", FetchMode.JOIN);
crit.setFetchMode("child2", FetchMode.JOIN);
crit.setResultTransformer(criteria.DISTINCT_ROOT_ENTITY);
List<Master> masters = crit.list();
此处主人将是与关联的child1&amp; child2实体。