2

JPA (トップリンク) で非常に単純な名前付きクエリがあります。

UPDATE Server s SET s.isECM = 0

すでにプリロードされているエンティティのキ​​ャッシュや有効性については扱いません。ただし、データベースへの接続は制限されたアカウント (INSERT/UPDATE/DELETE のみ) から実行されます。このクエリのトップリンクは、非常に奇妙な SQL を実行する (そして TL_Server が存在しないため失敗する) ようです。

INSERT INTO TL_Server (elementId, IsECM) 
    SELECT t0.ElementId, ? 
    FROM Element t0, Server t1 
    WHERE ((t1.elementId = t0.ElementId) AND (t0.elementType = ?))

bind => [0, Server]

これは何ですか?単純な UPDATE が INSERT にどのように見えるか? Toplink が TL_ を照会する理由

4

1 に答える 1

2

TL_Server は一時テーブルです。UpdateAll クエリは複雑であると判断されるため、一時テーブルを使用する必要があります。クラスには複数のテーブルがあるため、複雑であると判断されたため、それらを結合する必要がありますが、これは単純な更新では実行できません。

クラスに 1 つのテーブルしかない場合は、単純な更新だけが行われます。

これが失敗する場合は、データベース プラットフォームの一時テーブル サポートに問題があります。「toplink.target-database」を正しく設定していることを確認してください。どのデータベースを使用していますか?

非常に古いバージョンの TopLink Essentials を使用しているようですか? UpdateAll のサポートは、最新の EclipseLink バージョンで大幅に改善されています。アップグレードを検討してください。

TopLink Essentials を使用して動作させることができない場合は、JPQL の代わりにネイティブ SQL クエリをいつでも使用できます。

于 2011-01-10T15:02:39.097 に答える