Hibernate准备好的语句用问号替换值

时间:2012-08-01 17:12:48

标签: spring hibernate db2 websphere-6.1

我们正在将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方法。

1 个答案:

答案 0 :(得分:1)

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

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