Agrupamento, MAX e SUM com JPA

Caros,

Estou tentando o seguinte com JPA (Hibernate):

[code]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();[/code]

[code]@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
}[/code]

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!!!

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.

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: