使用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();
答案 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,这是一个很小的收益。