0

列にマップされたオブジェクトがありManyToOneます。ManyToOne結合されたテーブルの列で並べ替えようとすると、カウントと実際の結果リストのサイズが一致しません。これにより、ユーザーは結果の実際の最後のページを超えてページを移動できます。SeamEntityQueryが SQL をレンダリングして結果のリストを取得するとき、そのテーブルには結合が含まれますが、COUNTSQL の場合は除外されます。

以下の SQL の例では、 table ETEM_VW_CIN_COURSE、 columnを注文していますCIN

SQL の違いは次のとおりです。

select
    ...
from
    ETEM.ETEM_INV_INVENTORY eteminvinv0_,
    ETEM.ETEM_UIC etemuic1_,
    ETEM.ETEM_VW_CIN_COURSE etemvwcinc2_ 
where
    ...
order by
  etemvwcinc2_.CIN 

と:

select  
    count(*) as col_0_0_ 
from
    ETEM.ETEM_INV_INVENTORY eteminvinv0_,
    ETEM.ETEM_UIC etemuic1_ 
where   
    ...

ManyToOneこれは、結合の列で注文している場合にのみ発生します。それまでに注文を削除すると、期待どおりに機能するように見えます。SQL とCOUNTSQL で同じクエリを実行する方法はありますか?

4

1 に答える 1

0

この問題は、不要なフィールドで結合された結合テーブルを並べ替えようとしたことが原因です。EJBQL を調整して、その列 (コンポーネントに orderBy として格納されている) でソートするときに、外部キーが null でない行のみを含めるようにしました。その部分は、WHERE 句で次のようになります。

および ( lower(#{etemInvInventoryList.orderBy}) <> 'cin' または etemInvInventory.crseId が null ではない)

これにより、EJBQL と CountEJBQL が同じ結果セットを取得するようになります。

于 2012-08-07T14:28:42.410 に答える