从Hibernate 4调用MSSQL 2008存储过程时的空指针

时间:2012-04-30 12:16:50

标签: sql-server-2008 hibernate stored-procedures

我有一个映射存储过程

<sql-query name="sproc" callable="true" >
    <return alias="suppliers" class="model.Supplier">
        <return-property name="name" column="CoName" />
    </return>
    { call sproc(:p1,:p2,:p3}
</sql-query>

当作为命名查询执行并且存储过程返回结果时,query.list()将返回预期结果,但是当存储过程没有返回结果时,当Hibernate尝试初始化要返回的实体时,我得到NPE。

我可以抓住npe并返回一个空列表,但这不是很好,还有什么我可以做的吗?

1 个答案:

答案 0 :(得分:1)

根据这个hibernate docs,mssql存储过程必须返回一个结果集。此外,在第16.2.2.1节中,它声明您可以使用session.connection()。但我认为这不会有多大用处。因此处理空指针似乎是一个好方法。

编辑:

如果您使用session.connection(),如果输出是过程中唯一用于获取更改行数的输出,则还可以返回@@ROWCOUNT。 0表示没有返回