未知方言支持 REF_CURSOR 参数

Posted

技术标签:

【中文标题】未知方言支持 REF_CURSOR 参数【英文标题】:Dialect not known to support REF_CURSOR parameters 【发布时间】:2020-11-17 06:50:50 【问题描述】:

在 Spring Boot 应用程序中,我正在使用 StoredProcedureQuery 向 oracle db 发出请求

StoredProcedureQuery query = entityManager.createNamedStoredProcedureQuery("checkTest");

        query.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
        query.registerStoredProcedureParameter(3, String.class, ParameterMode.IN);
        query.registerStoredProcedureParameter(4, Integer.class, ParameterMode.IN);
        query.registerStoredProcedureParameter(1, Void.class, ParameterMode.REF_CURSOR);

        query.setParameter(2, dto.getIdentity());
        query.setParameter(3, dto.getSourceIp());
        query.setParameter(4, dto.getSource()); query.execute();

这是我的 plsql 响应

但是在我的代码中我得到了错误 QueryException: Dialect [org.hibernate.dialect.mysql5Dialect] not known to support REF_CURSOR parameters

【问题讨论】:

您使用的是 Oracle 吗?为什么不使用 org.hibernate.dialect.OracleDialect 而不是 org.hibernate.dialect.MySQL5Dialect? 是的,我正在使用 oracle 【参考方案1】:

您需要根据您正在使用的数据库指定适当的方言。

在这种 Hibernate 5.4 的情况下,尝试:

org.hibernate.dialect.Oracle10g 用于 Oracle 10g 或, org.hibernate.dialect.Oracle12cDialect 适用于 Oracle 12c。

https://docs.jboss.org/hibernate/orm/5.4/javadocs/

另一方面,如果你在 MySQL 上使用了这个存储过程,它不会工作,因为 MySQL 驱动程序不支持 REFCURSOR 参数。

【讨论】:

以上是关于未知方言支持 REF_CURSOR 参数的主要内容,如果未能解决你的问题,请参考以下文章

Nhibernate - 方言不支持 DbType.Double

Atian inputmethod 输入法解决方案 方言与多语言多文字支持 英语汉字汉语阿拉伯文的支持 (au

数据库方言和数据库连接池是什么

续集方言错误

MyBatis分页插件PageHelper之数据库方言

如何将百万美元html中的多个参数传递给百里香方言处理器