Olá tudo bem!
Estou tendo o seguinte retorno no console:
Exception in thread "main" java.lang.NullPointerException at java.lang.String$CaseInsensitiveComparator.compare(Unknown Source) at java.lang.String$CaseInsensitiveComparator.compare(Unknown Source) at java.util.TreeMap.getEntryUsingComparator(Unknown Source) at java.util.TreeMap.getEntry(Unknown Source) at java.util.TreeMap.get(Unknown Source) at org.hibernate.dialect.function.SQLFunctionRegistry.findSQLFunction(SQLFunctionRegistry.java:45) at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.findSQLFunction(SessionFactoryHelper.java:385) at org.hibernate.hql.internal.ast.tree.IdentNode.getDataType(IdentNode.java:367) at org.hibernate.hql.internal.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:667) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.propertyRef(HqlSqlBaseWalker.java:1154) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3906) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3769) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3647) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:732) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:588) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:325) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:273) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:276) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:113) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:73) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:162) at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:604) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:716) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:816) at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) at br.com.alura.loja.dao.PedidoDao.relatorioDeVendas(PedidoDao.java:40) at br.com.alura.loja.testes.CadastroDePedido.main(CadastroDePedido.java:44)
public List<RelatorioDeVendasVo> relatorioDeVendas(){
String jpql = "SELECT new br.com.alura.loja.dao.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 item.quantidade DESC";
return em.createQuery(jpql, RelatorioDeVendasVo.class)
.getResultList();
}
...
package br.com.alura.loja.testes;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.EntityManager;
import br.com.alura.loja.dao.CategoriaDao;
import br.com.alura.loja.dao.ClienteDao;
import br.com.alura.loja.dao.PedidoDao;
import br.com.alura.loja.dao.ProdutoDao;
import br.com.alura.loja.dao.vo.RelatorioDeVendasVo;
import br.com.alura.loja.modelo.Categoria;
import br.com.alura.loja.modelo.Cliente;
import br.com.alura.loja.modelo.ItemPedido;
import br.com.alura.loja.modelo.Pedido;
import br.com.alura.loja.modelo.Produto;
import br.com.alura.loja.util.JPAUtil;
public class CadastroDePedido {
public static void main(String[] args) {
popularBancoDeDados();
EntityManager em = JPAUtil.getEntityManager();
ProdutoDao produtoDao = new ProdutoDao(em);
ClienteDao clienteDao = new ClienteDao(em);
Produto produto = produtoDao.buscarPorId(1L);
Cliente cliente = clienteDao.buscarPorId(1L);
em.getTransaction().begin();
Pedido pedido = new Pedido(cliente);
pedido.adicionarItem(new ItemPedido(10, pedido, produto));
PedidoDao pedidoDao = new PedidoDao(em);
pedidoDao.cadastrar(pedido);
em.getTransaction().commit();
BigDecimal totalVendido = pedidoDao.valorTotalVendido();
System.out.println("valor total: "+totalVendido);
List<RelatorioDeVendasVo> relatorio = pedidoDao.relatorioDeVendas();
relatorio.forEach(System.out::println);
}