当前位置: 代码迷 >> java >> 如何使用spring和hibernate调用存储过程
  详细解决方案

如何使用spring和hibernate调用存储过程

热度:109   发布时间:2023-07-31 13:46:47.0

我收到一条错误消息,如java.lang.reflect.UndeclaredThrowableException和无效的列名。 您能帮我为什么我会收到此错误。

我建议遵循文档的建议:

除非遵循某些过程/功能规则,否则您不能在Hibernate中使用存储过程。 如果他们不遵守这些规则,则无法在Hibernate中使用。 如果仍然要使用这些过程,则必须通过session.connection()执行它们。 每个数据库的规则都不同,因为数据库供应商具有不同的存储过程语义/语法。

存储过程查询不能使用setFirstResult()/setMaxResults()进行分页。

建议采用的调用方式是标准SQL92: { ? = call functionName(<parameters>) } { ? = call functionName(<parameters>) }{ ? = call procedureName(<parameters>} { ? = call procedureName(<parameters>} 。不支持本机调用语法。

对于Oracle ,适用以下规则:

  • 函数必须返回结果集。 过程的第一个参数必须是返回结果集的OUT。 这是通过在Oracle 9或10中使用SYS_REFCURSOR类型完成的。在Oracle中,您需要定义REF CURSOR类型。 有关更多信息,请参见Oracle文献。

对于Sybase或MS SQL Server,适用以下规则:

  • 该过程必须返回结果集。 注意,由于这些服务器可以返回多个结果集和更新计数,因此Hibernate将迭代结果并将结果集的第一个结果作为其返回值。 其他一切将被丢弃。
  • 如果您可以在过程中启用SET NOCOUNT ON ,则可能会更有效,但这不是必需的。

一旦您的代码与规则保持一致,如果仍然出现错误,请提供完整的错误消息。

  相关解决方案