2009-08-01 19 views
2

I Oracle10gのデータベースとのEclipseLinkを使用しています、私はテーブルから最後の挿入されたキーを取得する必要があるので、私はJPQLでnvl(max(c.EmployeeId)、0)を選択しますか?

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

このクエリを作成しましたが、テーブルがempyときに(時にはそれが空になるかもしれない) 私は例外的な例外を受けています:原因:JPQL Exception、detail: "EntityManagerでクエリを作成中に例外が発生しました"私は間違っているの? Apu、このように最後に挿入されたキーを取り出すすべての:-)

まず、「私は最初を修正するために、その質問のどの部分かわからない」と言い換え

+0

問題はem.createQuery()またはq.getSingleResult()で発生しますか?適切なログレベルを設定して、生成されたSQLを見ることができますか(Hibernateにはこれがありますか、EclipseLinkについてはわかりません)? – javashlook

答えて

1

は、それは危険だ©に非常に悪いです非効率的であり、ほとんどの場合JPAはあなたのためにすでに必要です。エンティティを挿入すると、識別子プロパティが自動的に更新されて主キーが格納されます。

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

最後に、NVL()はJPQLでサポートされていません。サポートされています(Expression.ifNull()経由)。EclipseLink Expressionsです。とにかく、このようなシナリオでそれを必要とするわけではありません。一方で他の誰かがAutorizacionesで何かが挿入されている可能性があり、その後、あなたは間違ったIDに

1

NVL()を受け取るには

1

の新しいバージョンあなたはCOALESCE機能を使用することができますにサポートされるようになりました。それはnvlと同じになるために使用できます。たとえば、:

select nvl(columna,'1') from table 
select COALESCE(columna,'1') from table 
関連する問題