#sql #spring-boot #jpa
Вопрос:
Я фильтрую по имени, фамилии и номеру. Иногда я хочу искать по одному имени,иногда по имени и фамилии, иногда по всем.Операции LIKE и is null не работают.
Пример
имя:Адам фамилия:Макс номер:1235464 РАБОТАЕТ
имя:Адам фамилия:Макс нет:(Ноль) НЕ РАБОТАЕТ
2021-09-13 15:45:48 ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause
oracle.jdbc.OracleDatabaseException: ORA-01722: invalid number
@Transactional
@Modifying
@Query(value = "SELECT U.* FROM USER U "
"LEFT JOIN CV ON U.USERID=CV.USERID "
"JOIN PROFIL P ON P.CV_ID=CV.CV_ID "
"AND(:name is null OR P.name LIKE %:name% ) "
"AND (:surname is null OR P.surname LIKE %:surname% ) "
"AND (:no is null OR U.no=:no ) ", nativeQuery = true)
public List<User> findByDynamicQuery(@Param("name") String name, @Param("surname") String surname, @Param("no") String no);
Комментарии:
1. Нам определенно нужно больше деталей, чтобы помочь вам.
2. Можете ли вы также опубликовать код вашего класса модели пользователя?
Ответ №1:
Мне понадобится код вашего класса модели пользователя, чтобы проверить это, но oracle.jdbc.OracleDatabaseException: ORA-01722: invalid number
обычно это означает, что возникла проблема с преобразованием строки в число. Поскольку это работает не только в том случае, если у вас есть номер NULL
, я подозреваю, что вы используете примитивные типы (например int
, long
) вместо реальных классов чисел. Если это так, то замените int
/ long
в вашей модели на Integer
/ Long
.
Поделитесь дополнительными данными, если это не так, и мы постараемся помочь.