最大IDを返すときの書き方がわかりません。答えてください。
これを sessionbean に書きましたが、-1 が返されます。
@Override
public int searchMaxAdvID() {
int adid=em.createNativeQuery("select max(AdvID) from Advertisement").getMaxResults();
return adid;
}
問題は、getMaxResults-method を誤って解釈したことです。関数とは関係ありませんMAX
。documentationで述べたように、次のように動作する必要があります。
クエリ オブジェクトが取得するように設定された結果の最大数。setMaxResults がクエリ オブジェクトに適用されていない場合は、Integer.MAX_VALUE を返します。
あなたの場合、Integer.MAX_VALUEの代わりに-1を返すようです。これは明らかに間違っています。たとえば、Hibernate 3.6.8.Final は指定どおりに Integer.MAX_VALUE (2147483647) を返します。メソッド setMaxResults は、クエリによって返される行の最大数を制限します。
あなたの場合、getSingleResultは使用する正しい方法です。テーブルに行がない場合、結果は null になります。
Integer x = (Integer) em.createNativeQuery(
"select max(AdvID) from Advertisement").getSingleResult();
ネイティブクエリを使用する特定の理由がない場合は、Nayan Wadekar の回答で提案されているように JPQL クエリを使用してください。
ネイティブクエリを使用するのではなく、以下の通常の JPQL クエリを試すことができます。
Integer maxAdvId = (Integer) em.createQuery("SELECT MAX(a.advID) from Advertisement a").getSingleResult();