Просмотр доступа, созданный с помощью объединения с использованием JPA - PullRequest
0 голосов
/ 08 мая 2020

Из того, что я читал в Интернете, JPA 2.0 не поддерживает UNION в запросах SQL. Это раздражает, но ничего не может быть решено. Итак, я решил создать представление в базе данных, которое собирает желаемые данные из необходимых таблиц. Поэтому JPA имеет дело только с простым оператором select вместо UNIONS. Однако запрос представления создается с помощью операторов UNION. Я проверил данные, и они действительны.

Пример таблицы:

Country      Flow        Year 1       Year 2
--------------------------------------------    
France        A            25            78  
France        B            11            16  
France        C            18            88  
Russia        A            04            12  
Russia        B            86            99  
Russia        C            43            25  

Я думал, что затем выполню простой "SELECT * FROM schema" .view_name ". Он извлекает некоторые данные из представления, а затем дублирует их. Есть 3 таблицы, которые объединены вместе.

Данные, возвращаемые из представления:

Country      Flow        Year 1       Year 2
----------------------------------------------
France        A            25            78
France        A            25            78
France        A            25            78
Russia        A            04            12
Russia        A            04            12
Russia        A            04            12

Будет ли подход использовать представление вместо передачи собственного SQL с оператором UNION не работает? Если да, то почему бы и нет? Какие другие подходы я мог бы предпринять, чтобы обойти это ограничение?

Спасибо.

1 Ответ

0 голосов
/ 09 мая 2020

Вы, конечно, можете сделать это или также использовать собственный запрос и сопоставить его с сущностью, но это боль и не очень динамична c.

Вам понравится услышать, что я создал библиотека под названием Blaze-Persistence , которая работает поверх JPA и поддерживает операции над наборами, а также многие другие расширенные функции СУБД на основе модели JPA. Вот простой пример из документации , который демонстрирует, как можно выполнить запрос на объединение:

FinalSetOperationCriteriaBuilder<Cat> cb = 
    cbf.create(em, Cat.class)
        .from(Cat.class, "cat")
        .where("name").eq("Billy")
    .unionAll() 
        .from(Cat.class, "cat")
        .where("name").eq("Johnny")
    .endSet();
...