2012-07-21 45 views
0

我有3个表。 A,B,C。 A具有一对多与B. B具有一对多与C.休眠从多个表中取回数据

数据在表是,

TABLE A 
id     
10 
15 

TABLE B 
id  firstName AandB_Relation_Key 
55  Abc   10 
66  Pqr   10 
77  xyz   10 
88  ddd   15 

TABLE C 
id  phone_no  CandB_Relation_key 
41  44444   77 
42  55555   77 
43  66666   77 
44  88888   66 

我想检索表C取决于ID从表A的数据单查询这样一种方式

如果表B有相关的记录在表C,我想显示从B和C两个记录,否则只从表B记录(即这里firstName“xyz”有多个电话号码,所以我会显示xyz = 44444,55555,66666,ddd没有电话号码,所以只有ddd)

目前我做如,

a)从表B中的所有ID,其中AandB_Relation_Key =从表A // ID其返回从表B对ID的所有的ID从表A

B)然后即时c)从表C中选择count作为从表C中选择count(*),其中id =从a检索到的ID)

c)如果count> 0,从表B中选择firstName,phoneNo,C

d)其他从表B中选择名字

谢谢。

回答

0
select new list(firstName,phone_no) from A left join B left join C where a.id=:id 

我认为应该这样做。您将得到可选电话号码的名字列表。

+0

not worked.missing关键字错误。 – user1517605 2012-07-21 09:44:28

+0

umm。检查hibernate文档,当然我没有真正测试过,但是这个想法应该是非常有用的。 – 2012-07-22 08:52:50

+0

而不是列表,你也可以尝试映射或你自己的类与构造函数接受两个字符串。 – 2012-07-22 08:56:55