Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

valor Inicial Médio Leilao

Boa noite, Estou tentando corrigir o método em questão, mas ainda não encontrei solução. Mesmo com o join, ele está fazendo a média da quantidade de leiloes, de acordo com os lances. Pensei em group by, mas assim ele retorna duas médias. Como posso fazer para corrigir usando o join? Obrigado

public double getValorInicialMedioDoUsuario(Usuario usuario) {
        return (Double) session.createQuery("select avg(leilao.valorInicial) " +
                                            "from Leilao leilao " +
                                            "join leilao.lances lance " +
                                            "where lance.usuario = :usuario")
                            .setParameter("usuario", usuario)
                            .uniqueResult();        
    }
2 respostas

André, tudo bem ?

Não manjo muito o que tá rolando, mas será que o problema não está no valorInicial que você está pegando ? Não devia ser todos e tirar a média dele naquele leilão ?

solução!

A solução que encontrei foi inverter um pouco o select, partir da tabela de leilões e usar uma subquery na de lances agrupando por leilões, deu certo.

    public double getValorInicialMedioDoUsuario(Usuario usuario) {
        return (Double) session.createQuery("select avg(leilao.valorInicial) " +
                                            "from Leilao leilao " +
                                            "where leilao.id in (select lance.leilao.id from Lance lance where lance.usuario = :usuario)")
                    .setParameter("usuario", usuario)
                    .uniqueResult();
    }