У меня объявлено хранилище JPA PagingAndSorting. Я использую аннотацию @Query.
Я получаю исключение при вызове метода get () для Необязательного объекта из метода findById (id) хранилища.
Странная вещь, это происходит только тогда, когда я использую JPQL.
Код работает, если мой запрос является родным:
@Override
public BatchDto findById(String id) {
Optional<Batch> findResult = this.batchRepository.findById(id);
if (!findResult.isPresent()) return null;
Batch entity = findResult.get(); **<-------- Cast Exception Here**
BatchDto dto = this.mapper.toDto(entity, BatchDto.class);
List<BatchTransaction> transactions = entity.getTransactions();
dto.setTransactionDtos(mapper.toListDto(transactions, TransactionDto.class));
return dto;
}
Проверка объекта findResult с точкой останова - я вижу:
Optional[net.domain.data.batch@4b8bb6f]
когда у меня есть nativeQuery = true в аннотации @Query.
@Query(value = Sql.FindBatchById, nativeQuery = true)
Вот используемый запрос:
SELECT DISTINCT(B.batchNumber), COUNT(B.batchNumber) as TransactionCount FROM BATCH B WHERE B.batchReferenceNumber = :id GROUP BY B.batchNumber
Однако, если я изменю его на JPQL и удалю атрибут nativeQuery = true - findResult будет
Optional[[Ljava.lang.Object;@76e04327].
и я получаю ClassCastException:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to net.domain.data.batch
Итак, нижняя строка - это работает, если указать nativeQuery = true, и не работает, когда я пытаюсь использовать JPQL.
Я бы предпочел не указывать nativeQuery, поскольку мы в конечном итоге перенесем эту базу данных в Oracle.