#java #spring #postgresql #jpa
#java #spring #postgresql #jpa
Вопрос:
Проблема: я получаю следующий журнал ошибок -> java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.time.LocalDateTime
Возможная проблема, вызванная: возвращаемый тип необязательный, что означает, что у jpa возникают трудности с его отображением, поскольку он распознает необязательный, а не фактический тип данных LocalDateTime.
У кого-нибудь были какие-либо мысли о том, как это исправить? я имею в виду, что я мог бы вернуть объект и он отлично работает, но мне просто нужно вернуть одно значение
работает:
@Query(value = "SELECT * from audit where type='REQUEST_DOC_ONLINE' and user_id=:userId order by timestamp desc limit 1", nativeQuery = true)
Optional<AuditEntity> getLatestRetrievalDocumentDateAndTime(@Param("userId") Long userId);
не работает:
@Query(value = "SELECT * from audit where type='REQUEST_DOC_ONLINE' and user_id=:userId order by timestamp desc limit 1", nativeQuery = true)
Optional<LocalDateTime> getLatestRetrievalDocumentDateAndTime(@Param("userId") Long userId);
Комментарии:
1. Не могли бы вы показать нам класс аудита?
2. Если вы хотите посмотреть, какой тип данных метки времени является типом данных, который я пытаюсь вернуть LocalDateTime @Ismail
3. попробуйте заменить LocalDateTime на Date, а затем самостоятельно преобразовать его в LocalDateTime, временная метка не может быть преобразована в LocalDateTime.
4. @Ismail, если он не может, то принимает весь объект в порядке. Кстати, откуда взялась эта информация?
5. Попробуйте выбрать только столбец метки времени. Заменить
SELECT * from audit where...
наSELECT timestamp from audit where...
Ответ №1:
- Вы извлекаете все столбцы и пытаетесь привести его к
LocalDateTime
. Я бы предпочел предложить вам выбрать только те столбцы, которые имеютLocalDateTime
в качестве типа данных. - Я также думаю, что вы, вероятно, используете
Timestamp
orInstant
в качестве типа данных вAuditEntity
классе. Если это так, попробуйте использовать тот же класс при извлечении.
Комментарии:
1. Я объяснил выше, что работает, а что нет, это касается вашего первого пункта. И по поводу второго пункта, который вы сделали -> я не использую такой тип и использую LocalDateTime , в любом случае спасибо за усилия
2. В этом случае попробуйте создать POJO для сопоставления требуемых вам столбцов, а затем используйте это в инструкции fetch.
3. Как показано выше, мне нужно только одно значение, которое является отметкой времени
4. измените
select *
наselect timestamp