Как сопоставить табличную функцию с типизированным запросом гибернации - PullRequest
0 голосов
/ 10 июня 2019

У меня есть табличная функция в MSSQL

CREATE FUNCTION [dbo].[APP_ROLE_FOR_USER_WITH_DETAIL]
(
      @ID_USER bigint
)
RETURNS 
@retTable TABLE 
(
     ID_SPECIFICATION bigint,
     STATUS varchar(255),
     APPLICATION_CODE varchar(255),
     APPLICATION_NAME varchar(255),
     APPLICATION_ROLE_CODE varchar(255),
     APPLICATION_ROLE_NAME varchar(255),
     EXTENDED_INFORMATION varchar(255),
     DENIED bit,
     INHERITED_TABLE_LIST_ID bigint,
     INHERITED_ID bigint,
     INHERITED_FROM varchar(255),
     INHERITED_CODE varchar(255),
     INHERITED_NAME varchar(255),
     ACTIVE_FROM datetime2(7),
     ACTIVE_TO datetime2(7),
     STATUS_ASSING varchar(255),
     ROW_TYPE varchar(255),
     INHERITED_OU_ROOT bigint,
     ID_ROLE_VALIDITY bigint null
)
...

И мне нужно вызвать ее из JAVA с помощью менеджера сущностей hibernate.Я знаю, что могу вызвать его с помощью собственного запроса:

getEntityManager().createNativeQuery("select * from dbo.APP_ROLE_FOR_USER_WITH_DETAIL(:par)");

Но мне нужно как-то вызвать его с помощью TypedQuery, а не нативным.Я зарегистрировал некоторую скалярную функцию (которая возвращает простое значение), но я не могу зарегистрировать табличную функцию (или не знаю как)

Мне нужно вызвать что-то вроде:

String hql = "select spec from Specifications spec where spec.id IN (select func.ID_SPECIFICATION from dbo.APP_ROLE_FOR_USER_WITH_DETAIL(:idUser))

TypedQuery<Specification> q = getEntityManager().createQuery(hql,Specification.class);
q.setParameter("idUser", currentUserId);
return q.getResultList();

Мой вопрос: это вообще возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...