Исключение ConverterNotFoundException при выполнении собственного запроса

#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.