Как отобразить сущности, используя спящий режим и функцию оракула - PullRequest
3 голосов
/ 21 декабря 2011

Я пытаюсь отобразить несколько объектов на основе результата хранимой оракулом функции, возвращающей курсор.

Мой код выглядит так:

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

С этим кодом я получаю следующее исключение:

java.sql.SQLException: отсутствует параметр IN или OUT в индексе :: 3

Как я могу сказать Hibernate, что отсутствующим параметром является курсор?

В соответствии с этим документ это должно быть возможно, но нет примера кода для фактического вызова функции.

1 Ответ

2 голосов
/ 21 декабря 2011

Согласно документу, на который вы ссылаетесь,

Чтобы использовать этот запрос в 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...