Проблема с использованием объектов передачи данных с собственными запросами и классами java .time - PullRequest
0 голосов
/ 20 апреля 2020

соучастников. Я ищу способ выполнить собственный запрос, используя Hibernate версии 5.4.12Final и JPA версии 2.2. Проблема в том, что сам нативный запрос возвращает столбец, который является java. sql .Timestamp, и я пытаюсь заполнить список объектов передачи данных, который имеет поле LocalDateTime. Выполнение запроса завершается неудачно со следующей ошибкой:

IllegalArgumentException occurred while calling setter for property [com.myapp.dto.Sale.saleDateDTO (expected type = java.time.LocalDateTime)]; target = [com.myapp.dto.SaleDTO@1ea6c659], property value = [2020-03-09 09:52:35.0]

И эта ошибка возникает так, как она появляется на сервере Payara. Я использую версию 5.201:

"Timestamp":"2020-04-20T12:56:31.467-0400","Level":"ERROR","Version":"Payara 5.201","LoggerName":"org.hibernate.property.access.spi.SetterMethodImpl","ThreadID":"86","ThreadName":"http-thread-pool::http-listener-1(1)","TimeMillis":"1587401791467","LevelValue":"1000","LogMessage":"HHH000091: Expected type: java.time.LocalDateTime, actual value: java.sql.Timestamp"

Обратите внимание, что SaleDTO не является юридическим лицом. Это просто DTO, который я использую для хранения результатов собственного запроса. Есть ли способ указать, что я хочу это поле как LocalDateTime вместо java. sql .Timestamp? Если бы SaleDTO был Entity, мое приложение работало бы, так как JPA 2.2 автоматически выполняет необходимое преобразование, но, поскольку это не объект, он, похоже, не знает, как выполнить преобразование. Я также пытался использовать JPA AttributeConverter из Timestamp в LocalDate, но, вероятно, он также не обнаружен, поскольку не является сущностью.

Заранее большое спасибо за любую помощь.

...