HQL ou Criteria + Pesquisa em objetos que contém listas

Pessoal estou fazendo uns testes aqui com pesquisa em objetos que contém lista por exemplo:
Vendas e Itens da venda.

@Entity
@Table(name = "vendas")
public class Venda {

	@Id
	@GeneratedValue
	@Column(name = "id_venda", nullable = false, unique = true)
	private Long id;

	@ManyToOne
	@JoinColumn(name = "id_vendedor", nullable = false)
	private Vendedor vendedor;

	@ManyToOne
	@JoinColumn(name = "id_cliente", nullable = false)
	private Cliente cliente;

	@Column(name = "dt_venda", nullable = false)
	private Date dataDaVenda;

	@Column(name = "vl_total", nullable = false)
	private Double valorTotal;

	@OneToMany(fetch = FetchType.EAGER, mappedBy = "venda")
	@Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
	private Set<ItenDaVenda> itensDaVenda;
@Entity
@Table(name = "itens_da_venda")
public class ItenDaVenda {

	@Id
	@GeneratedValue
	@Column(name = "id_iten", nullable = false, unique = true)
	private Long id;

	@ManyToOne
	@JoinColumn(name = "id_venda", nullable = false)
	private Venda venda;

	@ManyToOne
	@JoinColumn(name = "id_produto", nullable = false)
	private Produto produto;

	@Column(name = "quantidade", nullable = false)
	private Integer quantidade;

	@Column(name = "vl_unit", nullable = false)
	private Double valorUnitario;

O que eu quero saber é por exemplo, qual venda que foi vendido o produto X, ou qual venda que teve maior quantidade de venda de um determinado produto.

SELECT DISTINCT 
    v.* 
FROM 
    vendas v
    JOIN itens_da_venda i
        ON ((v.id_venda = i.id_venda) AND (i.id_produto = 2))

Eu consigo fazer com SQL, mais gostaria de saber como fazer isso com HQL e/ou Criteria