Как эффективно искать унаследованные объекты с объединенной стратегией в JPA (человек или организация в качестве партнерJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как эффективно искать унаследованные объекты с объединенной стратегией в JPA (человек или организация в качестве партнер

Сообщение Anonymous »

Я работаю над приложением Spring Boot, используя JPA, и я сталкиваюсь с проблемой производительности с поисковым запросом над иерархией наследования.: есть firstname , lastname
[*]

Код: Выделить всё

Organization
: имеет компанию , RegistrationNumber , Tax -Number

Я использую соединенную стратегию наследства в JPA, поэтому у каждой сущности есть свои собственные таблицы., электронная почта , partnertype (enum: client или поставщик), EntityType (enum: person или организация) и т. Д.

Эта настройка позволяет партнеру (клиент или поставщик) быть человеком или организацией. /> Мне нужно создать лиц, который получает всех партнеров определенного партнера , и, необязательно, на поисках :
  • Если это человек , поиск FirstName + lastname
  • , если это и это CompanyName
Результат сопоставлен с DTO, который объединяет данные от партнера , person и организации .
💬 то, что я сделал
здесь Jpql Query, который я использую:

jpql Query:
jpql Query:
.

Код: Выделить всё

@Query("""
SELECT new com.example.api.PartnerResponseDto(
p.id,
p.partnerType,
p.entityType,
p.email,
p.createdAt,
p.updatedAt,
pe.firstName,
pe.lastName,
o.companyName,
o.registrationNumber,
o.taxNumber
)
FROM Partner p
LEFT JOIN Person pe ON p.id = pe.id
LEFT JOIN Organization o ON p.id = o.id
WHERE p.partnerType = :partnerType
AND (
:searchTerm IS NULL OR :searchTerm = ''
OR (
(p.entityType = 'PERSON' AND CONCAT(pe.firstName, ' ', pe.lastName) LIKE CONCAT('%', :searchTerm, '%'))
OR (p.entityType = 'ORGANIZATION' AND o.companyName LIKE CONCAT('%', :searchTerm, '%'))
)
)
""")
Page
 findPartners(
@Param("partnerType") PartnerType partnerType,
@Param("searchTerm") String searchTerm,
Pageable pageable
);
Он работает нормально и возвращает ожидаемые результаты.
Но я начинаю беспокоиться о производительности по мере роста данных. /> [*] an или < /code> условие в пункте «Где < /li> и как использование для поиска

Это делает запрос немного тяжелым и не таким чистым - особенно с учетом того, что он всегда соединяет обе таблицы, даже когда Entitytype - только один из них. в JPA. Заранее спасибо!


Подробнее здесь: https://stackoverflow.com/questions/796 ... jpa-person
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»