Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erros no @NamedQuery

Estou recebendo as seguintes mensagens de erro no Eclipse: Description Resource Path Location Type No constructors can be found that match the argument types. Movimentacao.java /1743-jpa-pesquisas-projeto_inicial/src/main/java/br/com/alura/jpa/modelo line 21 JPA Problem

Description Resource Path Location Type The identification variable 'day' is not defined in the FROM clause. Movimentacao.java /1743-jpa-pesquisas-projeto_inicial/src/main/java/br/com/alura/jpa/modelo line 21 JPA Problem

E outras parecidas com a segunda mensagem referentes a month e year. No entanto a classe de teste que executa a query retorna resultados corretos. Essa questão já foi abordada em outro tópico, porém a solução não ficou clara.

@Entity
@NamedQuery(name="MediaDiariaMovimentacao", query="select new br.com.alura.jpa.modelo.MediaComData(avg(m.valor), day(m.data), month(m.data)) from Movimentacao m group by day(m.data), month(m.data), year(m.data)")

public class Movimentacao {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", unique = true, nullable = false)
    private Long id;
    @Enumerated(EnumType.STRING)
    private TipoMovimentacao tipoMovimentacao;
    private LocalDateTime data;
    private String descricao;
    private BigDecimal valor;
    @ManyToOne
    private Conta conta;
    @OneToMany
    private List<Categoria> categoria = new ArrayList<>();
public class MovimentacaoDao {

    private EntityManager em;

    public MovimentacaoDao(EntityManager em) {
        super();
        this.em = em;
    }
    public List<MediaComData> getMediaDiaria(){

        TypedQuery<MediaComData> query = em.createNamedQuery("MediaDiariaMovimentacao", MediaComData.class);
        return query.getResultList();
    }
}
public class MediaComData {

    private Double valor;
    private Integer dia;
    private Integer mes;

    public MediaComData(Double valor, Integer dia, Integer mes) {
        this.valor = valor;
        this.dia = dia;
        this.mes = mes;
    }

    public Double getValor() {
        return valor;
    }

    public Integer getDia() {
        return dia;
    }

    public Integer getMes() {
        return mes;
    }

}
1 resposta
solução!

Seu código parece correto, pode ser algum aviso errado do eclipse visto que o código está funcionnando normalmente