@Convert не вызывается для репозитория. Сохранить - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь отформатировать дату и время, используя @Convert(converter = MyConverter.class). Это работает должным образом при сохранении, и данные правильно сохраняются в БД.


Проблема, с которой я столкнулся, - это объект, который возвращается, в то время как responseEntity = myrepository.save(myEntity) не имеет форматированной даты. Поле в responseEntity по-прежнему возвращает старый формат. Я что-нибудь упустил?


Мой класс конвертера:

   public class DateTimeConverter implements 
    AttributeConverter<LocalDateTime, String> {

    @Override
    public String convertToDatabaseColumn(LocalDateTime attribute) {
        if(Objects.isNull(attribute)) {
            return null;
        }
        attribute =  attribute.atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        return attribute.format(formatter);
    }

    @Override
    public LocalDateTime convertToEntityAttribute(String dbData) {
        if(Objects.isNull(dbData)) {
            return null;
        }
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        return LocalDateTime.parse(dbData, formatter);
    }
}

1 Ответ

1 голос
/ 08 мая 2020

repository.save() возвращает преобразованное значение, значение объекта преобразовано до времени sh гриппа. Он привязан только к контексту постоянства. Но вы хотите преобразовать значение, используя convertToEntityAttribute. convertToEntityAttribute вызывается только при извлечении из базы данных.

Выполните эту операцию в сервисе

entity.setProperty(entity.getProperty().atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime());
...