5

私は oracle10g データベースと eclipselink を使用しています。テーブルから最後に挿入されたキーを取得する必要があるため、このクエリを作成しました

javax.persistence.Query q =   
                    em.createQuery("SELECT nvl(MAX(c.myAtt),0) " +   
                        "from myTable as c");   
             return Integer.parseInt(q.getSingleResult().toString());   `

しかし、テーブルが空の場合 (空になる場合もあります)、ILEGAL ARGUMENT EXCEPTION が発生します。原因: JPQL 例外、詳細:「EntityManager でクエリを作成中に例外が発生しました」。私が間違っているのは何ですか?

4

4 に答える 4

2

機能を使用できますCOALESCE。と同じ目的で使用できますnvl。例えば:

select nvl(columna,'1') from table
select COALESCE(columna,'1') from table
于 2013-06-28T14:10:00.007 に答える
2

その間、他の誰かが Autorizaciones に何かを挿入した可能性があり、間違った ID を受け取ります

于 2010-05-05T12:06:07.053 に答える
2

NVL()jpql の新しいバージョンでサポートされるようになりました

于 2012-09-05T21:28:07.890 に答える
1

Apuを言い換えると、「その質問のどの部分を最初に修正すべきかわかりません」:-)

まず第一に、この方法で最後に挿入されたキーを取得することは非常に悪いことです© JPAがすでにそれを行っているため、危険で非効率的であり、何よりも不要です。エンティティを挿入すると、その識別子プロパティが自動的に更新されますその主キーを含みます。

次に、クエリに関する限り、「myTable」は JPQL で使用するものではありません。代わりにエンティティ名を指定する必要があります (たとえば、「Car」を「CAR_TABLE」にマッピングする場合は、代わりに「Car」を使用する必要があります)。 JPQL クエリの "CAR_TABLE" の一部)。

最後に、NVL()JPQL ではサポートされていません。これは、 EclipseLink Expressionsによって(一種の、経由でExpression.ifNull())サポートされています。とにかく、このようなシナリオで必要になるわけではありません。

于 2009-08-01T17:45:46.543 に答える