Я пытался обновить поле отметки времени, используя 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.
Кто-нибудь может помочь?





Оператор сравнения в JPQL и SQL = не ==
commit_ts==null
должно быть
commit_ts is null
ваш вклад был ценным. Могу ли я попросить вас отредактировать ответ на commit_ts IS NULL. (SQL-способ проверки на null) Я должен был быть немного осторожным, но глупо. Этот ответ поможет другим
ОК. я отредактировал ответ. Отметьте, пожалуйста, ответ как правильный?
Ах. Я не смотрел на этого ангела. Ошибка вводила в заблуждение. Спасибо за ваш вклад. позвольте мне попробовать и обновить вас. Еще раз, спасибо