@@不会为存储库调用。保存

问题描述 投票:0回答:1

我正在尝试使用@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);
    }
}
java hibernate spring-data-jpa repository converters
1个回答
1
投票

repository.save()确实返回转换后的值,即在刷新时间之前转换的实体值。它仅附加到持久性上下文。但是您想使用convertToEntityAttribute来转换值。 convertToEntityAttribute仅在从数据库中获取时调用。

在服务中执行此操作

entity.setProperty(entity.getProperty().atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime());
© www.soinside.com 2019 - 2024. All rights reserved.