2016-02-12 6 views
2

Я написал комплексный запрос API JPA 2 Criteria (мой провайдер - EclipseLink), где я снова и снова повторно использую один и тот же подзапрос. Если DB (Oracle) не делает что-то умное, я думаю, что подзапрос будет выполняться каждый раз, когда он будет найден в запросе. Я ищу способ выполнить подзапрос только один раз.JPA Критерии присоединения к запросу

У нас есть доступ на уровне поля, что означает, что пользователь имеет видимость для столбца БД, если выполняются определенные условия. В приведенном ниже пример, пользователь имеет следующие права доступа:

  • COLUMN_1 виден, если результат относится к категории 1
  • COLUMN_2 виден, если результат относится к категории 2
  • COLUMN_3 виден, если результат относится к категории 1 или категории 2

Это псевдо-запрос:

SELECT T.PK 
FROM MY_TABLE T 
WHERE 
(
    T.COLUMN_1 = 'A' 
    AND 
    T.PK IN (SELECT PKs of category 1) 
) 
AND 
(
    T.COLUMN_2 = 'B' 
    AND 
    T.PK IN (SELECT PKs of category 2) 
) 
AND 
(
    T.COLUMN_3 = 'C' 
    AND 
    (
     T.PK IN (SELECT PKs of category 1) 
     OR 
     T.PK IN (SELECT PKs of category 2) 
    ) 
) 

Если бы я написать его вручную в SQL, я написал бы его OUTER, соединяющую два запроса, как это:

SELECT T.PK 
FROM MY_TABLE T 
LEFT OUTER JOIN (SELECT PKs of category 1) IS_CAT_1 ON T.PK = IS_CAT_1.PK 
LEFT OUTER JOIN (SELECT PKs of category 2) IS_CAT_2 ON T.PK = IS_CAT_2.PK 
WHERE 
(
    T.COLUMN_1 = 'A' 
    AND 
    IS_CAT_1.RESULT = true 
) 
AND 
(
    T.COLUMN_2 = 'B' 
    AND 
    IS_CAT_2.RESULT = true 
) 
AND 
(
    T.COLUMN_3 = 'C' 
    AND 
    (
     IS_CAT_1.RESULT = true 
     OR 
     IS_CAT_2.RESULT = true 
    ) 
) 

Могу ли я присоединиться запрос в виде таблицы с Criteria API? Создание представления будет моим самым последним выбором (DB не поддерживается мной).

Примечание: Я видел, что EclipseLink предоставляет такую ​​специфическую для поставщика поддержку в JPQL (link), но я не видел это доступным для критериев.

ответ

0

В итоге мы создали представление БД, отобразили его как новый объект JPA и присоединили его к другим объектам.

 Смежные вопросы

  • Нет связанных вопросов^_^