2012-10-25 40 views
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?避免COUNT到CAST到BIGINT

代码示例如下:

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

你可以给你创建查询的示例代码吗? – dan1111

+0

@ dan1111:添加示例代码 –

回答

0

什么工作对我来说是:

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

基本上,我们需要使用像主键列非空的列以及与此更改可避免CAST消耗额外的CPU,一个小的增益。

1

哪一个是中投的问题?

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

顺便说一句,我用百达数超类,而不是特定的子类:

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

这样,如果JPA提供程序返回一个整数,或长或BigXXXX没有任何问题。