Tenho um aplicativo Java que usa um EntityManager para consultar um banco de dados Oracle e preencher uma classe DTO simples.
Isso funciona bem para varchars e strings, mas gera um erro:
Não foi possível determinar a estratégia de instanciação apropriada - nenhum construtor correspondente encontrado e um ou mais argumentos não definiram o alias para bean-injection
assim que tento passar um valor decimal. Tentei fazer o tipo no DTO um Double, double e BigDecimal - mas ainda recebo o erro
Além disso, isso costumava funcionar quando estava sendo executado no Java 8. Tive que atualizar para o Java 17 e ele começou a apresentar o erro.
@PersistenceContext
private EntityManager em;
String hql = "SELECT new my.example.MyDTO(mt.intVal as intVal, mt.decVal as decVal) " +
"FROM MyTable mt " +
"WHERE mt.id = 1234";
TypedQuery<MyDTO> findInsultsQuery = em.createQuery(hql, MyDTO.class);
//Here is where it gets the error - because of the mt.decVal
List<MyDTO> results = findInsultsQuery.getResultList();
Aqui está a classe DTO. Eu também tentei o segundo parâmetro como Double, double, Float e float. Ele sempre lança o erro no matching constructor.
public MyDTO(BigInteger intVal, BigDecimal decVal) {
}
Alguma sugestão?