1

datanucleus で JDOQL 一括更新を使用しようとしていますが、次の例外が発生します。

12/08/13 13:06:56 INFO DataNucleus.Persistence: プロパティ datanucleus.cache.level2 不明 - 無視されます 12/08/13 13:06:56 INFO DataNucleus.Persistence: ========= ======== 持続性設定 =============== 12/08/13 13:06:56 INFO DataNucleus.Persistence: DataNucleus Persistence Factory - ベンダー: "DataNucleus" バージョン: "2.2.5" 12/08/13 13:06:56 INFO DataNucleus.Persistence: DataNucleus Persistence Factory がデータストア URL="jdbc:derby:;databaseName=metastore_db;create=true" driver="org.apache. derby.jdbc.EmbeddedDriver" userName="APP" 12/08/13 13:06:56 INFO DataNucleus.Persistence: ======================= ================================== 12/08/13 13:06:57 INFO Datastore.Schema:カタログ ""、スキーマ "APP" を "None" を使用して初期化しています自動開始オプション 12/08/13 13:06:57 INFO Datastore.Schema: カタログ ""、スキーマ "APP" 初期化 - 0 クラスの管理 12/08/13 13:06:57 INFO DataNucleus.MetaData: リスナーの登録メタデータの初期化

実行するクエリ: UPDATE myDomain.MTable t SET t.tableName = 'tmp3' WHERE t.tableName == 'tmp' 12/08/13 13:06:57 INFO DataNucleus.JDO: Exception throw JPQL UPDATE query has no update句!クエリは "UPDATE Entity e SET e.param = new_value WHERE [where-clause]" org.datanucleus.exceptions.NucleusUserException: JPQL UPDATE query has no update clause! のようにする必要があります。クエリは、org.datanucleus.query.JDOQLSingleStringParser$Compiler.compileUpdate(JDOQLSingleStringParser.java:236) の "UPDATE Entity e SET e.param = new_value WHERE [where-clause]" のようにする必要があります。 .compileSelect(JDOQLSingleStringParser.java:160) at org.datanucleus.query.JDOQLSingleStringParser$Compiler.compile(JDOQLSingleStringParser.java:125) at org.datanucleus.query.

DN-core-2.2.4、DN-RDBMS-2.2.4、DN-Enhancer-2.1.3、DN-ConnectionPool-2.0.3 を使用しています。

更新プログラムを起動するコード スニペットは次のとおりです。

openTransaction();
Query q = pm.newQuery("javax.jdo.query.JDOQL", query);
q.compile();
Collection<?> result = (Collection<?>) q.execute();
committed = commitTransaction();

私が間違っていることについての指針。

私のクエリは、「UPDATE myDomain.A t SET t.tableName = 'tmp3' WHERE t.tableName == 'tmp'」という形式です。

4

0 に答える 0