【发布时间】:2021-08-28 04:15:54
【问题描述】:
我有使用 hibernate3 hibernateTemplate 执行存储过程的遗留代码,它使用带有 OUT 参数的 findByNamedQueryAndNamedParam 作为游标。下面是hbm映射的样子
<sql-query name="my_sql_procedure" callable="true">
{call Schema.my_sql_procedure(?,:param1,:param2,:param3, :param4, :param5)}
</sql-query>
Java 代码调用上述过程
List<?> errList = this.hibernateTemplate.findByNamedQueryAndNamedParam("my_sql_procedure", new String[] {
"param1", "param2", "param3", "param4", "param5" },
new Object[] { value1, value2, value3, value4,
value5});
以上代码在 Hibernate3 中运行良好,没有问题。
更新到 Hibernate5 后。它抛出以下错误。
org.springframework.orm.hibernate5.HibernateSystemException: Mixed parameter strategies - use just one of named, positional or JPA-ordinal strategy; nested exception is org.hibernate.engine.query.ParameterRecognitionException: Mixed parameter strategies - use just one of named, positional or JPA-ordinal strategy
我的猜测是 Hibernate5 不喜欢第一个参数 (?) 问号被作为 (?) 传递。
通过对存储过程和 Java 代码的最小更改(我在整个代码中有 50 多个存储过程),我如何使用 Hibernate5 使上述存储过程正确执行,以便它以光标作为输出参数返回正确的结果.我翻遍了,但找不到使用 hibernate5.findByNamedQueryAndNamedParam 执行以游标为 out 参数的存储过程的示例。
【问题讨论】:
标签: java hibernate stored-procedures hibernate-mapping spring-orm