#java #hibernate #spring-boot #spring-data-jpa
#java #спящий режим #весенняя загрузка #spring-data-jpa
Вопрос:
В моем приложении у меня есть следующая функция в @Repository
классе:
@Query(value="SELECT roster_date FROM timetable", nativeQuery=true)
List<LocalDate> getAllDates();
Когда я выполняю приведенный выше запрос, я столкнулся со следующим ConverterNotFoundException
:
org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.util.ArrayList<?>] to type [@org.springframework.data.jpa.repository.Query java.util.List<java.time.LocalDate>]
for value '[2019-04-19 00:00:00.0, 2019-04-21 00:00:00.0]';
nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.sql.Timestamp] to type [@org.springframework.data.jpa.repository.Query java.time.LocalDate]
Я попытался зарегистрировать пользовательский конвертер следующим образом, но он также не работает.
@Component
public class SqlTimestampToLocalDateConverter implements Converter<Timestamp, LocalDate> {
@Override
public LocalDate convert(Timestamp source) {
return source.toLocalDateTime().toLocalDate();
}
}
Если я вызываю findById
, чтобы получить ОДНУ запись, используя мой @Entity
класс, который содержит LocalDate
свойство для roster_date
столбца, тогда он работает нормально.
Я был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление.
Комментарии:
1. Работает для меня с Spring Boot 2.1.4 — пример здесь . Можете ли вы добавить номер версии Spring Boot к вопросу?
2. @manish: Спасибо, что дали ему попробовать. Я также использую 2.1.4. Можете ли вы попробовать
nativeQuery=true
и убедиться, что ваши исходные данные содержат более 1 даты? В моей базе данных у меня есть значения, которые отображаются в исключении в этом точном формате2019-04-19 00:00:00.0
.3. Вам действительно нужен собственный запрос? Вы можете загрузить мой пример проекта и попробовать несколько вещей.
4. @manish: я использую очень простой запрос в качестве примера, чтобы задать вопрос. В моем реальном случае использования это сложный запрос, который возвращает несколько дат в формате
2019-04-19 00:00:00.0
. Я не могу использовать JPQL :(.5. Если вы столкнулись с проблемой, связанной конкретно с собственными запросами, вы можете захотеть поднять проблему в Spring JIRA. Вполне возможно, что в Spring Data есть ошибка, из-за которой не выполняется собственный запрос, но не запрос JPA.
Ответ №1:
Если у вас уже есть класс сущности, вы можете использовать это вместо этого, я думаю, ваш класс сущности называется Time:
@Query("select t.rosterDate from Time t")
Если у вас уже есть классы сущностей, вы можете использовать JPQL.