0

Open JPA 2.0を使用すると、データベースはDB29.7になります。のようなクエリの場合SELECT COUNT(1) FROM USER WHERE FNAME := fname、JPAはクエリをに変換していますSELECT COUNT(CAST(? AS BIGINT)) FROM TABLENAME。CAST to 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プロバイダーが整数、long、またはBigXXXXを返しても問題はありません。

于 2012-10-25T22:46:12.923 に答える
0

私のために働いたのは:

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

基本的に、主キー列のようなnull許容でない列を使用する必要があります。この変更により、追加のCPUを消費するCASTを回避でき、わずかなゲインが得られます。

于 2012-10-26T15:20:35.727 に答える