0

我有 3 张桌子。大师,孩子1,孩子2。

Master 与 child1 有一对多的关系。

Master与child2有一对多的关系。

child1 和 child2 之间没有关系。

我想使用休眠在单个查询中从所有 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 表可以有 none、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 

是否可以在休眠中使用单个查询来检索数据,还是需要使用多个查询?

4

2 回答 2

1

Select master from master master left join fetch master.child1 left join fetch master.child2

这会将 master 作为根,并带有两个填充的子列表?

至于id=13我不明白你怎么有一个FK不存在的问题master

于 2012-08-18T06:20:26.553 回答
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();

这里的masters将是 Master 与关联 child1 和 child2 实体的列表。

于 2012-08-18T06:22:27.970 回答