Spring JPA Hibernate дает ошибку при обновлении метки времени в часовом поясе в postgres - PullRequest
0 голосов
/ 08 июня 2018

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

Столбец: 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.

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

1 Ответ

0 голосов
/ 08 июня 2018

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

commit_ts==null 

должен быть

commit_ts is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...