2012-08-17 57 views
0

我有3个表。法师,child1,的child2。从多个表中获取休眠数据

大师与child1有一对多的关系。

大师与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中,对主表可以有无,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

任何人都可以帮忙吗? – user1607139 2012-08-17 16:48:55

+0

如果你可以为此写一个sql,那么你也可以写一个hql – Swapnil 2012-08-18 06:18:27

回答

1

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

这将使主为根与孩子的两个人口稠密的名单?

由于担心id=13我不明白你怎么有FK不存在master

+0

不要忘记标记一个答案。 – 2012-08-20 01:16:27

1

您可以使用标准从所有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 &的child2实体名单。

+0

谢谢RAS。这个代码我得到了所有的结果。但我怎样才能从表chid1得到不同的结果(在我的情况下,child1包含3个条目,master_child1_reltion_key 11与相同的stored_date。它应该是1条目,因为日期相同)。在child2中可以有重复。 – user1607139 2012-08-18 16:53:19

+0

插入数据时需要注意。如果id为3&4的child1对您无用,那么您为什么将它们插入表中? – RAS 2012-08-19 06:53:07