【问题标题】:SpringData JPA native query gives java.sql Data instead of LocalDateSpring Data JPA 原生查询提供 java.sql 数据而不是 LocalDate
【发布时间】:2020-04-29 15:57:11
【问题描述】:

我的 JPA 存储库带有如下本机查询(实际查询很复杂):

@Query(value="select registration_num, registration_date from registration_details", nativeQuery="true")
List<Object[]> getDateDetails();

我正在将此列表值放入一个映射中,其中 registration_num 作为键,registration_date 作为键。

问题是查询是 java.sql 类型的返回日期,但我需要 LocalDate 类型。 对于要放入地图的每个值,我必须像(Date)obj[1] 那样进行转换,然后sqlDate.toLocalDate() 才能进一步使用。这是非常低效的。有没有办法从查询中返回 LocalDate 或返回具有两个属性 registrationNum 和 registrationDate 的类的列表。

例如:

@Query(value="select registration_num, registration_date from registration_details", nativeQuery="true")
List<MyDTO> getDetails(); 

class MyDTO {
  private String registrationNum;
  private LocalDate registrationDate;
}

【问题讨论】:

  • 如果你尝试会发生什么?

标签: java spring-boot jpa spring-data-jpa localdate


【解决方案1】:

在最近的春季版本中,它自动转换。对于旧版本,您可以使用AttributeConverter,它会自动应用于实体类中的每个 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());
    }

}

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 2019-12-01
    • 1970-01-01
    • 2020-02-15
    • 2021-02-13
    • 2017-12-13
    • 2019-01-09
    • 2021-11-22
    • 2018-03-14
    相关资源
    最近更新 更多