我們有這樣的命名查詢:如何讓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