2012-11-22 48 views
0

我有一个情况,需要中检索来自多个表中的记录,并有可能一些表没有任何记录按条件标准 例如: -检索多发记录HQL甚至一些表中都没有记录

select * 
from A a, B b, C c, D d, E e 
where a.CERT_REQUEST_ID = '' 
    and a.CERT_OBJ_RLT_CD = '' 
    and b.CERT_ID = a.CERT_OBJ_KEY_ID 
    and b.CERT_TRS_SEQ_NBR = a.CERT_TRS_SEQ_NBR 
    and b.CERT_TRS_SEQ_NBR = c.CERT_TRS_SEQ_NBR 
    and b.CERT_ID = c.CERT_ID 
    and c.CERT_OBJ_KEY_ID = d.CERT_OVERRIDE_ID 
    and e.CERT_WORDING_ID = c.CERT_OBJ_KEY_ID 

表E,D有可能没有上述标准的记录。所以在这种情况下,我也需要其他表格的记录。

我可以通过左外连接实现这一点,但HQL不支持连接,并且这些表也没有映射。 那么,如何在hql中实现这一点。请帮助

回答

0

HQL支持连接(包括左连接):link

但是,如果表未映射,您将无法使用HQL。您可以使用SQL中的查询createSQLQuery()

+0

感谢您的回复。我作为sql查询执行,我也得到了数据,但我的结果不在对象。我怎么能知道哪些细节属于哪个表。与Hibernate,我可以在下面的方式,但不能与SQL: - 如果(listCert = NULL && listCert.size()> 0!){ \t \t \t的(对象[] objArray:listCert){ \t \t \t \t B cert =(B)objArray [1];}} – SHAHZZ

+0

@shahzar [请参阅此知道如何从SQL查询获取实体。](http://docs.jboss.org/hibernate/orm/3.3/reference/en /html/querysql.html#d0e13696)如果不知道实体和你想做什么,我不能更明确。 – Pablo

+0

当我执行一个hql查询,然后我会得到对象形式的记录,例如:-listCert是有5个表记录的结果我可以以某种方式检索不同的对象: - 列表 listCert = dao.executeNamedQuery( strBuffer.toString(), \t \t \t \t params,values);如果(listCert = NULL && listCert.size()> 0!){ \t \t \t为(对象[] objArray:listCert){ \t \t \t \t乙证书=(B)objArray [1]; \t \t \t \t C certObj =(C)objArray [3]; \t \t \t \t D certOverride =(D)objArray [4]; \t \t \t \t E certWording =(E)objArray [5];}} – SHAHZZ