Spring Data JPA Метод именования содержит запрос для двойного значения - PullRequest
0 голосов
/ 29 октября 2019

У меня есть объект, который содержит некоторые атрибуты, и я хочу написать запрос like (содержит) для всех его атрибутов с одним единственным параметром из фронт-контроллера. я успешно достиг его для значений String, но для числовых (long, double) значений не могу использовать ключевое слово содержащее ключевое слово, поскольку оно выдает исключение (значение параметра ['% 10%'] не соответствует ожидаемому типу java.lang.Double()... что-то...).

поля моей сущности

    private String firstName;
    private double rating;

метод запроса моего репозитория

    List<MobileUser> findByFirstNameIgnoreCaseContainingOrRatingContaining(String value, double value2);

метод уровня моего сервиса, который принимает только одно значение

public List<MobileUserDTO> getMobileUsersLike(String value) {
    // parses the value and if it is not a numeric value it will be -1 (this is also a bad logic)
    Double parseDouble = (double) -1;
    try { parseDouble = Double.parseDouble(value); } catch (NumberFormatException ignored) { }
    // calls repository
    List<MobileUser> allUsersLike = mobileUserRepository.findByFirstNameIgnoreCaseContainingOrRatingContaining(value, parseDouble);
    return getMobileUserDtoList(allUsersLike);
}

howя достигну этого? спасибо.

1 Ответ

2 голосов
/ 29 октября 2019

Вы можете попробовать использовать JPQL-запрос:

@Query("FROM MobileUser WHERE firstName like %:firstName% OR CAST(rating AS TEXT) LIKE %:rating% ")
List<MobileUser> findByNameAndRating(@Param("name") String firstName, @Param("rating") String rating);

Вы не можете использовать SQL like для double, если не приведете его к String.

...