0

我有两个表,我想使用两个表中存在的两个字段从表 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 吗?

4

1 回答 1

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

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

于 2013-10-16T15:09:50.953 回答