Собственный запрос SpringData JPA дает java. sql данных вместо LocalDate. - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть репозиторий JPA с собственным запросом, как показано ниже (фактический запрос сложный):

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

Я помещаю это значение списка в карту с регистрационным значением_num в качестве ключа и регистрационным_датой в качестве ключа.

Проблема в том, что запрос является датой возврата типа 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;
}

1 Ответ

0 голосов
/ 01 мая 2020

В последней весенней версии он автоматически конвертируется. Для более старой версии вы можете использовать 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());
    }

}
...