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)时,只包括外键不为空的行。这部分在我的 WHERE 子句中如下所示:

和( lower(#{etemInvInventoryList.orderBy}) <> 'cin' 或 etemInvInventory.crseId 不为空)

这会强制 EJBQL 和 CountEJBQL 提取相同的结果集。

于 2012-08-07T14:28:42.410 回答