Consulta com Hibernate + calcular média

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:

[code]// outros atributos

private int voto;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name=“id_noticia”)
@Fetch(FetchMode.JOIN)
private Noticia noticia;

//gets and sets
[/code]

No DAO eu fiz o seguinte:

public List<Noticia> listar() {
		Criteria criteria = this.session.createCriteria(Noticia.class);
		criteria.addOrder(Order.desc("data_cadastro"));
		return criteria.list();
}

Na minha DataTable as notícias são listadas perfeitamente, mas gostaria de colocar na mesma DataTable a média das notas recebidas.

Tentei fazer o seguinte:

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

}
[/code]

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.

@OneToMany(mappedBy="usuario", fetch= FetchType.LAZY) @Cascade(org.hibernate.annotations.CascadeType.ALL) private Collection<Voto> voto;
Não seria algo assim.

@OneToMany(mappedBy="noticia", fetch= FetchType.LAZY) @Cascade(org.hibernate.annotations.CascadeType.ALL) private Collection<Voto> voto;
Digo pela bidirecionalidade?!

[quote=dreampeppers99]@OneToMany(mappedBy="usuario", fetch= FetchType.LAZY) @Cascade(org.hibernate.annotations.CascadeType.ALL) private Collection<Voto> voto;
Não seria algo assim.

@OneToMany(mappedBy="noticia", fetch= FetchType.LAZY) @Cascade(org.hibernate.annotations.CascadeType.ALL) private Collection<Voto> voto;
Digo pela bidirecionalidade?![/quote]
Isso ta me cheirando copiar colar… :lol:

uhahuahuahuahuahuahuahuahuahuahua…

Foi sim, mas funciona :stuck_out_tongue: . Troquei aqui e da no mesmo.

Sabem como pegar a informação de média pelo criteria?