Minha Classe RelatorioDeVendasVo:
package br.com.alura.loja.vo;
import java.time.LocalDate;
public class RelatorioDeVendasVo {
private String nomeProduto;
private Long quantidadeVendida;
private LocalDate dataUltimaVenda;
public RelatorioDeVendasVo(String nomeProduto, Long quantidadeVendida, LocalDate dataUltimaVenda) {
this.nomeProduto = nomeProduto;
this.quantidadeVendida = quantidadeVendida;
this.dataUltimaVenda = dataUltimaVenda;
}
public String getNomeProduto() {
return nomeProduto;
}
public Long getQuantidadeVendida() {
return quantidadeVendida;
}
public LocalDate getDataUltimaVenda() {
return dataUltimaVenda;
}
@Override
public String toString() {
return "RelatorioDeVendasVo [nomeProduto=" + nomeProduto + ", quantidadeVendida=" + quantidadeVendida
+ ", dataUltimaVenda=" + dataUltimaVenda + "]";
}
}
Minha Classe PedidoDao:
package br.com.alura.loja.dao;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.EntityManager;
import br.com.alura.loja.modelo.Pedido;
import br.com.alura.loja.vo.RelatorioDeVendasVo;
public class PedidoDao {
private EntityManager em;
public PedidoDao(EntityManager em) {
this.em = em;
}
public void cadastrar(Pedido pedido) {
this.em.persist(pedido);
}
public BigDecimal valorTotalVendido() {
String jpql = "SELECT SUM(p.valorTotal) from Pedido p";
return em.createQuery(jpql, BigDecimal.class).getSingleResult();
}
public List<RelatorioDeVendasVo> relatorioDeVendas(){
String jpql = "SELECT new br.com.alura.loja.vo.RelatorioDeVendasVo("
+ "produto.nome, "
+ "SUM(item.quantidade), "
+ "MAX(pedido.data)) "
+ "FROM Pedido pedido "
+ "JOIN pedido.itens item "
+ "JOIN item.produto produto "
+ "GROUP BY produto.nome "
+ "ORDER BY SUM(item.quantidade) DESC ";
return em.createQuery(jpql, RelatorioDeVendasVo.class).getResultList();
}
}
O erro que está dando é:
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.query.sqm.sql.internal.InstantiationException: Error performing dynamic instantiation : br.com.alura.loja.vo.RelatorioDeVendasVo
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:166)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:193)
at org.hibernate.query.spi.AbstractQuery.list(AbstractQuery.java:1373)
at org.hibernate.query.Query.getResultList(Query.java:131)
at br.com.alura.loja.dao.PedidoDao.relatorioDeVendas(PedidoDao.java:39)
at br.com.alura.loja.teste.CadastroDePedido.main(CadastroDePedido.java:53)
Caused by: org.hibernate.query.sqm.sql.internal.InstantiationException: Error performing dynamic instantiation : br.com.alura.loja.vo.RelatorioDeVendasVo
at org.hibernate.sql.results.graph.instantiation.internal.DynamicInstantiationAssemblerConstructorImpl.assemble(DynamicInstantiationAssemblerConstructorImpl.java:58)
at org.hibernate.sql.results.internal.StandardRowReader.readRow(StandardRowReader.java:93)
at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:66)
at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:24)
at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:228)
at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:146)
at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:74)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$0(ConcreteSqmSelectQueryPlan.java:80)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:248)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:191)
at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:513)
at org.hibernate.query.spi.AbstractQuery.list(AbstractQuery.java:1364)
... 3 more
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:70)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
at org.hibernate.sql.results.graph.instantiation.internal.DynamicInstantiationAssemblerConstructorImpl.assemble(DynamicInstantiationAssemblerConstructorImpl.java:52)
... 14 more
Caused by: java.lang.ClassCastException: Cannot cast java.lang.Integer to java.lang.Long
Entretanto, está dando erro na hora de executar. Como resolver?