从多个表中获取hibernate数据

时间:2012-08-17 14:45:23

标签: hibernate

我有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中使用单个查询检索数据,还是需要使用多个查询?

2 个答案:

答案 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实体。