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();
4

2 回答 2

1

哪一个是 CAST 中的问题?

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

顺便说一句,我总是使用 Number 超类而不是特定的子类:

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

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

于 2012-10-25T22:46:12.923 回答
0

对我有用的是:

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

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

于 2012-10-26T15:20:35.727 回答