esta dando erro nesta linha clienteTO = (ClienteTO) q.getSingleResult();
12:12:09,002ERROR[stderr](http--127.0.0.1-8089-1) java.lang.ClassCastException: java.lang.Double cannot be cast to br.com.projetoCliente.relatorios.to.ClienteTO
H
Hebert_Coelho
Olha a mensagem de erro:
De onde você tirou que está retornando mais de um resultado? Seu problema é de java mesmo, e não JPA.
T
thiagoRibeiro
Quando eu digo que irá retornar uma linha de resultado e porque eu executei a query direto no banco,
eu percebi que o problema e no Cast, mas se eu tiro esse Cast ai ele pedi para eu declarar meu ClienteTO como Object
na linha clienteTO = (ClienteTO) q.getSingleResult(); ao invés de retornar o valor esta retornando um Object
como eu posso converter isso ?
F
fredericomaia10
O resultado da sua query é um numeral Double e não um objeto ClienteTO. Por isso dá erro quando tenta converter de Double para ClienteTO.
T
thiagoRibeiro
O que eu devo fazer para retornar um ClienteTO ?
Minha query esta assim
SELECT NVL(SUM(valor),0),
NVL(SUM(valor_1),0),
NVL(SUM(valor_2),0),
NVL(SUM(valor_3),0),
NVL(SUM(valor_4),0),
NVL(SUM(valor_4),0)
FROM CLIENTES
WHERE DATA_MOVIMENTO = '20131128'
nela retorna 1 linha com 5 colunas com os valores
F
fredericomaia10
Sua query é a que foi postada no primeiro tópico né? Sabe que não é uma SQL query nativa, está usando JPQL.
Quando você busca por atributos específicos, ele não te retorna o objeto, te retorna um array de Object.
Repare no blog do Hebert que pra usar sql mesmo você deveria chamar o método em.createNativeQuery.
T
thiagoRibeiro
Hebert,
estou seguindo o link que vc me passou que por sinal é muito bom mas estou tendo o erro de que a tabela não existe
mas esta mapeado meu ClienteTO, inclusive comentei a consulta que estou querendo fazer e estou executando uma outra consulta com a mesma Entidade mapeada e esta funcionando
segue como implementei
EntityManager em = new UtilFactoryDAO().getEntityManagerConection();
Query query = em.createNativeQuery("SELECT SUM(r.valor),SUM(r.valor1) FROM ClienteTO r " +
"where r.dataMovimento = :dataMovimento ", ClienteTO.RESULT_AMOUNT);
query.setParameter("dataMovimento", dataMovimento);
Object[] result = (Object[]) query.getSingleResult();
clienteTO = (ClienteTO) result[0];
BigInteger total = (BigInteger) result[1];