1

我们将 Hibernate 3 与 WebSphere v6 和 DB2 一起使用。我们遇到了 Hibernate 发出的错误 SQL 准备语句并导致语法问题的奇怪问题。

Hibernate 发出的良好查询:

SELECT * FROM rocc.Transaction t WHERE t.status_cd = 0 和 t.application_cd = ? order by coalesce(t.priority,0) 仅获取前 25 行

Hibernate 有时会错误地发出相同的查询:

SELECT * FROM rocc.Transaction t WHERE t.status_cd = ? t.application_cd = ? ORDER BY COALESCE (t.priority, ? ) FETCH first ? 仅行

它用问号替换值(零)并将关键字的字体更改为大写(没关系,但在这里提到)。它还用问号更改了 fetch 子句中的数字 25。

Hibernate 有时发出错误的准备好的语句是什么原因造成的?

Hibernate 正在调用 WSJdbcPreparedStament.executeQuery 方法。

4

1 回答 1

1

这是 JDBC 上preparedStatement 的正常行为,它将查询中的参数替换为?,这也有助于数据库为您的查询构建优化的访问计划。Hibernate 只是自动执行此操作。

Jdbc 参考或我们在休眠之前的习惯。

于 2012-08-01T20:39:16.233 回答