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.