如何使用hibernate和oracle函数映射实体

时间:2011-12-21 17:14:52

标签: java oracle hibernate

我正在尝试根据返回游标的oracle存储函数的结果映射一些实体。

我的代码如下所示:

this.getSession().createSQLQuery("{?=call my_pkg.my_func(:myPar1,:myPar2)}")
                .addEntity(MyTargetClass.class)
                .setParameter("myPar1",par1)
                .setParameter("myPar2",par2)
                .list();

使用此代码,我得到以下异常:

java.sql.SQLException:在index :: 3

处缺少IN或OUT参数

如何告诉Hibernate丢失的参数是游标?

根据这个doc它应该是可能的,但实际上没有实例调用函数的示例代码。

1 个答案:

答案 0 :(得分:2)

根据您链接的文件,

  

要在Hibernate中使用此查询,您需要通过命名查询映射它。

因此,创建一个命名查询,如下所示:

<sql-query name="my_pkg_my_func_SP" callable="true">
    <return alias="..." class="MyTargetClass">
        <return-property name="..." column="..."/>
        ...
    </return>
    { ? = call my_pkg.my_func(:myPar1,:myPar2) }
</sql-query>

并使用以下内容调用它:

final List<MyTargetClass> myTargetClassList =
    this.getSession().getNamedQuery("my_pkg_my_func_SP")
    .setParameter("myPar1", par1)
    .setParameter("myPar2", par2)
    .list();