我有一个原生查询的JPA存储库,如下所示(实际查询很复杂):
@Query(value="select registration_num, registration_date from registration_details", nativeQuery="true")
List<Object[]> getDateDetails();
我把这个列表值放入一个映射中,registration_num作为键,registration_date作为键。
问题是查询是java. sql
类型的返回日期,但我需要它在LocalDate类型中。对于要放入map中的每个值,我必须像(Date)obj[1]
那样进行转换,然后sqlDate.toLocalDate()
才能进一步使用。这是非常低效的。有什么方法可以从查询或返回具有两个属性的类的列表中返回LocalDate,注册Num和注册Date。
例如:
@Query(value="select registration_num, registration_date from registration_details", nativeQuery="true")
List<MyDTO> getDetails();
class MyDTO {
private String registrationNum;
private LocalDate registrationDate;
}
在最近的Spring版本中,它会自动转换。对于旧版本,您可以使用AtbanteConverter
,它会自动应用于实体类中的每个LocalDate类型。
@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate localDate) {
return (localDate == null ? null : Date.valueOf(localDate));
}
@Override
public LocalDate convertToEntityAttribute(Date sqlDate) {
return (sqlDate == null ? null : sqlDate.toLocalDate());
}
}