Как установить значения datetimeoffset в JPQL? - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь расширить CrudRepository для реализации функции мягкого удаления.Обращаясь к этим вопросам и ответам , я создал интерфейс хранилища следующим образом:

@NoRepositoryBean
public interface SoftDeleteCrudRepository<T extends SoftDelete, ID extends Long> extends CrudRepository<T, ID> {
    //...

    @Override
    @Query("update #{#entityName} e set e.delDT=current_timestamp where e.delDT is null and e.id=?1")
    @Modifying
    void deleteById(Long id);

    //...
}

Метод работает хорошо, но значение delDT не содержит значения смещения (например, 2019-04-08 17:41:20.12 +00:00).

Я могу изменить JPQL на собственный запрос и использовать sysdatetimeoffset() вместо current_timestamp, но я хочу продолжать использовать JPQL, если могу.

Как установить значения datetimeoffset вJPQL

1 Ответ

0 голосов
/ 10 апреля 2019

Кажется, что нет способа сделать это в JPQL, поэтому я должен был обойти.По сути, я использовал неявное преобразование SQL-сервера из varchar в datetimeoffset.Так что это может не работать в других СУБД.Я изменил интерфейс хранилища следующим образом:

@NoRepositoryBean
public interface SoftDeleteCrudRepository<T extends SoftDelete, ID extends Long> extends CrudRepository<T, ID> {
    //...

    @Query("update #{#entityName} e set e.delDT=?2 where e.delDT is null and e.id=?1")
    @Modifying
    void deleteById(Long id, String datetimeStr);

    //...
}

Затем используйте вот так:

authRepository.deleteById(entity.getSeq(), OffsetDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS XXX")));

Я также изменил delDT тип поля с OffsetDatetime на String от сущностиучебный класс.В противном случае возникнет исключение, подобное этому.

org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [2019-04-10 11:53:13.189 +09:00] did not match expected type [java.time.OffsetDateTime (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [2019-04-10 11:53:13.189 +09:00] did not match expected type [java.time.OffsetDateTime (n/a)]
...