我们有这样的命名查询:如何让EclipseLink为UPDATE WHERE子句输出有效的Informix SQL?
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来履行这些限制?是否有更好的查询我应该使用?
您正在使用哪个版本的Informix?你参考11.50信息中心,所以我猜你正在使用11.50。但是,由于11.70中的等效页面([UPDATE的WHERE子句中的子查询](http://publib.boulder.ibm.com/infocenter/idshelp/v117/topic/com.ibm.sqls.doc/ids_sqs_2005.htm ))包含相同的信息,但这次可能不是主要问题(但总是陈述您正在使用的Informix的版本,以及平台;它通常很重要)。 – 2013-02-28 01:52:39
修改答案;这是11.70。 – 2013-02-28 14:07:56
EclipseLink在连接时检测哪个DatabasePlattform(应打印到日志中)?它能正确检测Informix吗? – MRalwasser 2013-02-28 16:34:17