Spring JPA Hibernate дает ошибку при обновлении метки времени wo часового пояса в postgres

Я пытался обновить поле отметки времени, используя update stmt. Я пробовал java.sql.timestamp, java.util.date, Calendar, LocalDateTime, ZonedDateTime и кучу других пакетов утилиты java date. Кажется, что ни один из них не работает.

Столбец: commit_ts (TimeStamp без часового пояса в Postgresql) определяется в нашем JPA / Hibernate как

@Column(name = "COMMIT_TS")
@Temporal(TemporalType.TIMESTAMP)
private Timestamp commitTs;

вот запрос

@Timed(name = "updateWorkAllocationStatus")
@Transactional
@Modifying(clearAutomatically = true)
@Query(
      nativeQuery = true,
      value = "UPDATE wlm_work_allocation SET commit_ts=:ts " + 
              "WHERE allocation_id = :allocationId " + 
              "and status = :status " + 
              "and commit_ts == null"
)
int updateWorkAllocationStatus(
    @Param("timestamp") Timestamp ts,
    @Param("allocationId")Long allocationId,
    @Param("status")String status
);

Я также пробовал NativeQueries

@NamedNativeQuery(name = "WorkAllocationEntity.updateCommitTs",
        query = "UPDATE wlm_work_allocation SET commit_ts= TIMESTAMP WHERE allocation_id=:allocationId and status=:status and commit_ts==null")

Примечание. Согласно этой ссылке, стандарт SQL требует, чтобы запись только временной метки была эквивалентна метке времени без часового пояса, и PostgreSQL соблюдает это поведение. https://www.postgresql.org/docs/9.1/static/datatype-datetime.html

Версия Springboot: 1.5.7.RELEASE

Драйвер Postgres JDBC: 9.0-801.jdbc4

БД PostgresSQL: 9.6.5

Error: 
org.postgresql.util.PSQLException: ERROR: operator does not 
exist: timestamp without time zone == unknown
Hint: No operator matches the given name and argument type(s). 
You might need to add explicit type casts.

Кто-нибудь может помочь?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
520
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оператор сравнения в JPQL и SQL = не ==

commit_ts==null 

должно быть

commit_ts is null

Ах. Я не смотрел на этого ангела. Ошибка вводила в заблуждение. Спасибо за ваш вклад. позвольте мне попробовать и обновить вас. Еще раз, спасибо

Vijay Ram 08.06.2018 16:43

ваш вклад был ценным. Могу ли я попросить вас отредактировать ответ на commit_ts IS NULL. (SQL-способ проверки на null) Я должен был быть немного осторожным, но глупо. Этот ответ поможет другим

Vijay Ram 08.06.2018 16:59

ОК. я отредактировал ответ. Отметьте, пожалуйста, ответ как правильный?

Simon Martinelli 09.06.2018 15:34

Другие вопросы по теме