0

2 つのテーブルがあり、両方のテーブルに存在する 2 つのフィールドを使用して、テーブル B で参照されているテーブル A からエントリを選択したいと考えています。

エントリを参照するために使用される 2 つのフィールドは数値であるため、次のクエリは私が望むことを実行します (ただし、乗算とテーブル 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 に答える