[RESOLVIDO] Join invertido

Eu preciso de um relatorio que busque todos os produtos e o total de vezes que ele aparece na compra.
Fiz desta forma, mas ele não lista os produtos que nunca apareceram nas compras.

@Entity
@Table(name = "produto")
public class Produto {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	private String descricao;
}
[/code][code]
@Entity
@Table(name = "compra")
public class Compra {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	@ManyToOne
	private List<Produtos> produtos;
	private Comprador comprador;
}
Criteria criteria = getSession().createCriteria(Compra .class, "p");
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.groupProperty("produtos"));
projectionList.add(Projections.rowCount());
criteria.setProjection(projectionList);
List<Object[]> results = criteria.list();

Sim, pois, provavelmente, esta criteria gera um JOIN ou RIGHT JOIN, ou seja, traz apenas o que existe na tabela à direita e à esquerda.
O correto seria que você incluisse uma subquery, fazendo um LEFT JOIN.

Consegui fazer drsmachado, resolvi desta maneira.

Adicionei um atributo no produto.

	@OneToMany(mappedBy = "produtos")
	private List<Compra> compras;

e fiz a criteria assim

List<ProcessosArea> quantitativo = new ArrayList<>();
		Criteria criteriaArea = getSession().createCriteria(Produto.class,"p");
		criteriaArea.createAlias("compras", "c",CriteriaSpecification.LEFT_JOIN);
		ProjectionList projectionList = Projections.projectionList();
		projectionList.add(Projections.groupProperty("id"));
		projectionList.add(Projections.groupProperty("descricao"));
		projectionList.add(Projections.count("c.id"));
		criteriaArea.setProjection(projectionList);

Obrigado.

Beleza camarada, parabéns.
Bela atitude de voltar aqui e dizer como resolveu.

Quebrei a cabeça, mas consegui procurei o que você disse sobre subquery, mas não deu certo…

Eu procurei como fazer Right join com criteria, que também poderia resolver, mas não sei se estou procurando errado ou não tem.