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