Pessoal,
Estou com uma dúvida que está me matando. Como muitos aqui, não consigo fazer outra coisa até descobrir a solução. Procurei no GUJ e não achei nada parecido.
Tenho uma entidade Noticia.java que faz o seguinte relacionamento:
//outros atributos
@OneToMany(mappedBy="usuario", fetch= FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Collection<Voto> voto;
//gets and sets
Nisso minha outra entidade Voto.java tem:
// outros atributos
private int voto;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id_noticia")
@Fetch(FetchMode.JOIN)
private Noticia noticia;
//gets and sets
public List<Noticia> listar() {
Criteria criteria = this.session.createCriteria(Noticia.class);
criteria.addOrder(Order.desc("data_cadastro"));
return criteria.list();
}
Tentei fazer o seguinte:
public List<Noticia> listar() {
ProjectionList projList = Projections.projectionList();
projList.add(Projections.avg("voto").as("VotoNoticia.avgVoto"));
projList.add(Projections.groupProperty("tb.voto"));
DetachedCriteria dcrit = DetachedCriteria.forClass(Voto.class,"tb")
.setProjection(projList);
Criteria criteria = this.session.createCriteria(Noticia.class);
criteria.createCriteria("voto", "tb").add(Subqueries.exists(dcrit));
criteria.addOrder(Order.desc("dataCadastro"));
return criteria.list();
}
Só que tem um problema. Está listando só as notícias que já tem voto e se tiver mais de um voto está listando várias vezes a mesma notícia.
Alguém já usou o AVG que poderia ajudar?
Grato.
. Troquei aqui e da no mesmo.