无法将带有subselect的SQL查询转换为Hibernate命名查询

时间:2013-10-16 14:56:39

标签: java sql hibernate

我有两个表,我想从表A中选择使用两个表中存在的两个字段在表B中引用的条目。

用于引用条目的两个字段是数字,因此以下查询执行我想要的操作(但由于乘法而导致它很慢,因为表B很大)。

select * from TIBP
where IBP_CODE * 100 + IBP_BASE in
      (select FZGLP_CODE * 100 + FZGLP_BASE from TFZGLP)

我已成功将其映射到以下HQL命名查询:

<query name="findWhereReferencedInZglp">
    select tibp 
    from TibpEntity as tibp
    where tibp.code * 100 + tibp.base in
          (select zglp.code * 100 + zglp.base from ZglpEntity as zglp) 
</query>

为了提高上述速度,我修改了SQL语句如下:

select * from TIBP as A,
              (select distinct FZGLP_CODE, FZGLP_BASE from TFZGLP) as B
where A.IBP_CODE = B.FZGLP_CODE and A.IBP_BASE = B.FZGLP_BASE

可悲的是,我没有设法将其转换为可以解析的命名HQL查询。这甚至可以使用HQL / Hibernate吗?

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用内连接;类似于以下SQL:

select A.*,distinct B.FZGLP_CODE, B.FZGLP_BASE 
from TFZGLP B
inner join TIBP A on A.IBP_CODE = B.FZGLP_CODE
    where A.IBP_BASE = B.FZGLP_BASE

您可以轻松将其转换为休眠状态。