Код: Выделить всё
Person
[*]
Код: Выделить всё
Organization
Я использую соединенную стратегию наследства в JPA, поэтому у каждой сущности есть свои собственные таблицы.
Код: Выделить всё
id
Эта настройка позволяет партнеру (клиент или поставщик) быть человеком или организацией. /> Мне нужно создать лиц, который получает всех партнеров определенного партнера , и, необязательно, на поисках :
- Если это человек , поиск FirstName + lastname
- , если это и это CompanyName
здесь 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>
Код: Выделить всё
CONCAT
Это делает запрос немного тяжелым и не таким чистым - особенно с учетом того, что он всегда соединяет обе таблицы, даже когда Entitytype - только один из них. в JPA. Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/796 ... jpa-person