Вызов хранимой функции Oracle, которая возвращает пользовательский тип с гибернацией

#java #sql #spring #oracle #hibernate

#java #sql #spring #Oracle #режим гибернации

Вопрос:

На днях я столкнулся с проблемой с Hibernate, Spring и Oracle: как я могу вызвать хранимую функцию, которая возвращает пользовательский тип (объект Oracle) с помощью Hibernate.

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

Вот мой исходный код :

 -- Main function

CREATE OR REPLACE FUNCTION "ECOMMERCE"."NOMBRECOMMANDESPERIODE" (v_dateDebut DATE, v_dateFin DATE)
    RETURN t_commandes_periode
IS
    v_nombre_commandes NUMBER;
    v_nombre_commandes_non_livrees NUMBER;
    v_nombre_commandes_impayees NUMBER;
BEGIN
    SELECT COALESCE(COUNT(c.id), 0)
        INTO v_nombre_commandes
    FROM Commande c
    WHERE c."date" >= v_dateDebut
        AND c."date" <= v_dateFin;

    v_nombre_commandes_non_livrees := commandesNonLivrees(v_dateDebut, v_dateFin).COUNT;
    v_nombre_commandes_impayees := commandesImpayees(v_dateDebut, v_dateFin).COUNT;

    RETURN t_commandes_periode(v_nombre_commandes, v_nombre_commandes_non_livrees, v_nombre_commandes_impayees);
END;
/

-- The returned type

CREATE OR REPLACE TYPE "ECOMMERCE"."T_COMMANDES_PERIODE" AS OBJECT (
  nombreTotal       NUMBER,
  nombreNonLivrees  NUMBER,
  nombreImpayees    NUMBER
);
/
  

Как я могу вызвать эту функцию с помощью режима гибернации, чтобы иметь возможность работать с объектом Java, который отражает T_COMMANDES_PERIODE пользовательский тип?

Я благодарю всех, кто попытается помочь мне с этой моей проблемой :).

Комментарии:

1. вам удалось найти решение?

2. Я отказался от этого, это было неудобно…

3. Спасибо, Винсент, за ваш ответ! Я также отхожу от этого, собираюсь использовать поддержку хранимых процедур в JPA 2.1 Хранимые процедуры JPA 2.1