我正在尝试使用@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);
}
}
repository.save()
确实返回转换后的值,即在刷新时间之前转换的实体值。它仅附加到持久性上下文。但是您想使用convertToEntityAttribute
来转换值。 convertToEntityAttribute
仅在从数据库中获取时调用。
在服务中执行此操作
entity.setProperty(entity.getProperty().atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime());