问题描述
我收到一条错误消息,如java.lang.reflect.UndeclaredThrowableException
和无效的列名。
您能帮我为什么我会收到此错误。
1楼
我建议遵循文档的建议:
除非遵循某些过程/功能规则,否则您不能在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
,则可能会更有效,但这不是必需的。
一旦您的代码与规则保持一致,如果仍然出现错误,请提供完整的错误消息。