Agrupamento, MAX e SUM com JPA

2 respostas
D

Caros,

Estou tentando o seguinte com JPA (Hibernate):

String sql = "select new xpto.Xyz( max(x.data), sum(x.valor), sum(x.desconto) ) from Xyz x "
  + "where x.tipo=:tipo group by x.grupo";
Query query = getEntityManager().createQuery(sql);
query.setParameter("tipo ", tipo );
return query.getResultList();
@Entity
public class Xyz {
  @Id private Integer id;
  private Date data;
  private Integer valor;
  private Integer desconto;

  public Xyz() {}

  public Xyz(Date data, Integer valor, Integer desconto) {
    this.data = data;
    this.valor = valor;
    this.desconto = desconto;
  }

  // gets and sets
}

Só que ele dá o seguinte erro: [color=red]Unable to locate appropriate constructor on class [xpto.Xyz] [select new xpto.Xyz( max(x.data), sum(x.valor), sum(x.desconto) ) from xpto.Xyz x where x.tipo=:tipo group by x.grupo][/color]

Porém, se eu faço sem o MAX e SUM, ele funciona.

Qual a melhor maneira de solucionar isto? Usando SQL nativo? Usar uma outra classe para mapear estes dados?

Lembro que também preciso que os dados de relacionamentos devem vir.

Valeu!!!

2 Respostas

R

Eu fiz algo parecido usando Toplink e ta funcionando.

Da uma olhada se voce ta passando a package correta da classe “Xyz” no jpql e caso nao funcione tente executar o jpql sem o NEW so para ver os tres objetos que o entityManager esta retornando.

PS: no meu caso eu utilizei uma classe diferente da entidade no select new.

D

Seguindo a dica dos amigos LIPE e Rafael Steil, funcionou.

Alterei o construtor de Integer para Number.

Além do que, isto também funciona:

Criado 22 de abril de 2009
Ultima resposta 22 de abr. de 2009
Respostas 2
Participantes 2