Union в JPA и с использованием псевдонима - PullRequest
0 голосов
/ 09 июля 2020

У меня есть 2 Entites, PERSON и PEOPLE

PERSON имеет столбцы, а именно -> FN, LN

PEOPLE имеет столбцы -> FIRST, LAST

Я хочу получить объединение обеих таблиц вместе. Как мне это сделать в JPA. Я использовал следующий способ:

Создал новый DTO -> Human с двумя полями FIRSTNAME и LASTNAME (с учетом регистра)

@Query(value=" SELECT FIRSTNAME, LASTNAME FROM "+
  "(  SELECT "+
  "      P.FN AS FIRSTNAME, "+
  "      P.LN AS LASTNAME " +
  " FROM PERSON P"+
  " UNION "+
  " SELECT "+
  "      A.FIRST AS FIRSTNAME, "+
  "      A.LAST AS LASTNAME ' +
  " FROM PEOPLE A"+
  ")", nativeQuery = true)
Pageable<Human>  getEntireHumanRace() {
.... 
}

Запуск SQL хорошо, но ORM всегда формирует неверный формат SQL, например «Синтаксическая ошибка в SQL заявлении SELECT COUNT (P) FROM PERSON P ....» InvalidDataAccessResourceUsageException: не удалось подготовить оператор

Есть ли предложение о том, что можно сделать? Почему он ставит счетчик перед сгенерированным запросом? Цени заранее.

1 Ответ

1 голос
/ 09 июля 2020

Почему он ставит счетчик перед сгенерированным запросом?

Потому что вы пытаетесь получить данные с разбивкой на страницы (Pageable). Итак, для общего количества элементов выполняется запрос Count.

Есть ли какие-нибудь предложения о том, что можно сделать?

Вы используете проекцию на основе классов и используете List<Human>

@Query(value="SELECT FIRSTNAME, LASTNAME FROM ...")
List<Human> getEntireHumanRace();
...