次のような名前付きクエリがあります。
UPDATE Foo f SET f.x = 0 WHERE f.x = :invoiceId
Foo
この場合は、クラスごとのテーブル継承戦略を使用するスーパークラスを持つエンティティです。
EclipseLinkが生成するSQLは次のとおりです。
UPDATE foo_subclass SET x = ?
WHERE EXISTS(SELECT t0.id
FROM foo_superclass t0, foo_subclass t1
WHERE ((t1.x = ?) AND ((t1.id = t0.id) AND (t0.DTYPE = ?)))
(?
スロットは正しく埋められています。)
Informix 11.70では、サブクエリが変更中のテーブルにアクセスできないというエラーが発生します。
Informixのサブクエリ制限について見つけたドキュメントは次のとおりです。http: //publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp? topic =%2Fcom.ibm.sqls.doc%2Fids_sqs_2005 .htm
他のデータベースにもこのようなサブクエリに対する制限があります。したがって、これはInformixの問題として現れていますが、たとえばMySQLに対してこれを実行すると、同様のエラーが発生することは間違いありません。
EclipseLinkにこれらの制限を尊重させるにはどうすればよいですか?使用すべきより良いクエリはありますか?