避免COUNT到CAST到BIGINT

时间:2012-10-25 08:20:17

标签: jpa db2 jpa-2.0

使用Open JPA 2.0,数据库是DB2 9.7。对于SELECT COUNT(1) FROM USER WHERE FNAME := fname之类的查询,JPA会将查询转换为SELECT COUNT(CAST(? AS BIGINT)) FROM TABLENAME。 如何避免CAST到BIGINT?

以下代码示例:

query = entityManager.createNamedQuery("qry.checkuser");
query.setParameter("fname", fname); 
Long count = (Long)query.getSingleResult();

2 个答案:

答案 0 :(得分:1)

哪一个是CAST中的问题?

我认为你无法避免它,因为它是由JPA提供者生成的SQL。

BTW,我总是使用Number超类而不是特定的子类:

query = entityManager.createNamedQuery("qry.checkuser", Number.class);
query.setParameter("fname", fname); 
Number count = query.getSingleResult();
// Do whatever is needed
if (count.longValue()...

这样,如果JPA提供程序返回整数,long或BigXXXX,则没有问题。

答案 1 :(得分:0)

对我有用的是:

SELECT COUNT(USER_ID) FROM USER WHERE FNAME := fname

基本上我们需要使用一个不可为空的列,如主键列,并且通过此更改可以避免CAST消耗额外的CPU,这是一个很小的收益。