0

最大IDを返すときの書き方がわかりません。答えてください。

これを sessionbean に書きましたが、-1 が返されます。

@Override
    public int searchMaxAdvID() {
        int adid=em.createNativeQuery("select max(AdvID) from Advertisement").getMaxResults();
        return adid;
    }
4

2 に答える 2

0

問題は、getMaxResults-method を誤って解釈したことです。関数とは関係ありませんMAXdocumentationで述べたように、次のように動作する必要があります。

クエリ オブジェクトが取得するように設定された結果の最大数。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 クエリを使用してください。

于 2012-06-17T17:06:23.977 に答える
0

ネイティブクエリを使用するのではなく、以下の通常の JPQL クエリを試すことができます。

Integer maxAdvId = (Integer) em.createQuery("SELECT MAX(a.advID) from Advertisement a").getSingleResult();
于 2012-06-17T16:28:07.463 に答える