我们有一个这样的命名查询:
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 遵守这些限制?我应该使用更好的查询吗?