2011-12-21 87 views
3

我想基於返回遊標的oracle存儲函數的結果映射幾個實體。如何映射實體使用休眠和oracle函數

我的代碼如下所示:

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

有了這個代碼,我得到以下異常:

值java.sql.SQLException:在指數:3

IN或OUT參數丟失我如何告訴Hibernate缺少的參數是一個遊標?

根據這doc它應該是可能的,但沒有示例代碼實際調用該函數。

回答

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();