我们正在将Hibernate 3与WebSphere v6和DB2一起使用。 Hibernate发出错误的SQL预处理语句并导致语法问题,我们遇到了奇怪的问题。
Hibernate发布的好查询:
SELECT * FROM rocc.Transaction t WHERE t.status_cd = 0和 t.application_cd =?通过coalesce(t.priority,0)获取前25个 仅限行
Hibernate有时会错误地发出相同的查询:
SELECT * FROM rocc.Transaction t WHERE t.status_cd = ? AND t.application_cd =? 按照COALESCE排序 (t.priority, ? ) FETCH < / strong>第一个 ? 仅限ROWS
它正在用问号替换值(零)并将关键字的字体更改为大写(这没关系,但在此提及)。它还使用问号更改了fetch子句中的数字25。
Hibernate发布错误的预备声明会导致什么原因?
Hibernate正在调用WSJdbcPreparedStament.executeQuery方法。
答案 0 :(得分:1)
这是preparedStatement在JDBC上的正常行为,它将查询中的参数替换为?,这也有助于数据库为您的查询构建优化的访问计划。 Hibernate只是自动执行此操作。
Jdbc Reference或我们在休眠之前的习惯。