Problema JPA quando EntityManager injetado!

2 respostas
nei.junior
Considere o seguinte exemplo:
package sistema.objetos;

public class Carro {

    private String nome;    
    private String marca;

    public Carro (String nome, String marca) {
	this.nome = nome;
	this.marca = marca
    }

    ...
    getters e setters
    ...
}
Quando vou recupera-lo do banco faço a seguinte: Obs.: Faço o select assim propositalmente, aqui no exemplo não parece ter necessidade, daria para contornar de outra forma, mas no meu sistema preciso fazer assim.
SELECT new sistema.objetos.Carro(c.nome, c.marca) FROM Carro c GROUP BY c.marca
Ai o que acontece é o seguinte: No sistema trabalho com EJB, sendo assim tenho uma classe de teste unitário no qual eu crio o EntityManager na mão e quando rodo o select acima ele funciona normalmente. Porém quando pego o mesmo select e coloco meu meu DAO, onde o EntityManager é injetado utilizando a anotação @PersistenceContext e executo, apresenta a seguinte mensagem:
Error compiling the query: 
    [SELECT new sistema.objetos.Carro(c.nome, c.marca) FROM Carro c GROUP BY c.marca]: 
invalid SELECT expression [NEW sistema.objetos.Carro(c.nome, c.marca)] for query with grouping [GROUP BY c.marca]. 
Only aggregates, GROUP BY items or constructor expressions of these are allowed in the SELECT clause of a GROUP BY query.
Agora a pertuna é: Porque quando executo o select pelo teste unitário, no qual crio o EntityManager na mão funciona e quando executo o mesmo select dentro do DAO, no qual injeto o EntityManager pelo @PersistenceContext da esse erro ?

Alguém tem alguma ideia ? O correto seria funcionar nos dois ou dar erro nos dois.

2 Respostas

F

Olá,

O select colunaA, colunaB from tabela group by colunaC não funciona pois a colunaC deve ser incluída na clausula select. Esse erro retorna de qualquer banco de dados e não é erro do JPA.

Você pode tentar usar distinct.

Abraço,

Fred

nei.junior

Olá fre_d

Eu sei como o select funciona e que realmente se for como vc explicou, não funciona rodando no banco.
Mas não sei se você viu até o fim do post, onde coloquei uma pergunta (que é onde esta minha dúvida) de porque em um jeito funciona e no outro não ?
Tem ideia ?

Abraço !

Criado 29 de junho de 2011
Ultima resposta 29 de jun. de 2011
Respostas 2
Participantes 2