Код: Выделить всё
// UserController
@GetMapping
public ResponseEntity findUsers(@ParameterObject FindUserRequestDto userRequestDto,
@ParameterObject Pageable pageable) {
List userResponseDtos = userService.find(userRequestDto, pageable);
return ResponseEntity.ok(userResponseDtos);
}
@Override
public List find(FindUserRequestDto userRequestDto, Pageable pageable) {
// flattening
List users = repository.find(
userRequestDto.getDateOfBirth(),
userRequestDto.getPhone(),
userRequestDto.getName(),
userRequestDto.getEmail(),
pageable);
List userDtos = users.stream()
.map(userMapper::toResponseDto)
.toList();
return userDtos;
}
< /code>
@Query("""
SELECT u
FROM User u
WHERE (CAST(:dateOfBirth AS DATE) IS NULL OR u.dateOfBirth > CAST(:dateOfBirth AS DATE))
AND (:name IS NULL OR u.name LIKE CONCAT(:name, '%'))
AND (:email IS NULL OR EXISTS (
SELECT 1 FROM EmailData ed WHERE ed.user = u AND ed.email = :email
))
AND (:phone IS NULL OR EXISTS (
SELECT 1 FROM PhoneData pd WHERE pd.user = u AND pd.phone = :phone
))
""")
List find(@Param("dateOfBirth") LocalDate dateOfBirth,
@Param("phone") String phone,
@Param("name") String name,
@Param("email") String email,
Pageable pageable);
< /code>
Есть ли способ каким -то образом эталонный атрибуты параметров внутри запроса JPQL? Или иным образом избегать перечисления всех атрибутов DTO в списке параметров (делая это долго)?
Подробнее здесь: https://stackoverflow.com/questions/796 ... es-in-jpql