Bom dia,
Gostaria muito de aprender como fazer uma consulta equivalente a esse HQL abaixo usando Criteria, para a seguintes classes.
HQL
StringBuilder hql = new StringBuilder("");
hql.append(" FROM Produto p ");
hql.append(" WHERE p.excluido IS NULL ");
hql.append(" AND NOT EXISTS(FROM Estoque e WHERE e.produto = p) ");
hql.append(" ORDER BY p.nome ");
DetachedCriteria dc = DetachedCriteria.forClass(Estoque.class, "e");
dc.add(Restrictions.eqProperty("e.produto", "produto")).setProjection(Projections.id());
criterion.add(Subqueries.notExists(dc));
Classe Produto
[code]@Entity
@Table(schema = “public”, name = “produto”)
@SequenceGenerator(name = “id_creator”, sequenceName = “produto_id”)
public class Produto implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "id_creator")
@Column(name = "id")
private Long id;
@OneToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "id_tipo_produto", nullable = false)
private TipoProduto tipoProduto;
@Column(name = "codigo_barra", nullable = true, length = 13)
private String codigoBarra;
@Column(name = "nome", nullable = false, length = 50)
private String nome;
@Column(name = "valor_custo", nullable = false, length = 13, precision = 4)
private Double valorCusto;
@Column(name = "valor_atacado", nullable = false, length = 13, precision = 4)
private Double valorAtacado;
@Column(name = "valor_varejo", nullable = false, length = 13, precision = 4)
private Double valorVarejo;
@Lob
@Basic(fetch = FetchType.EAGER)
@Column(name = "imagem")
private byte[] imagem;
@Column(name = "data_excluido", nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date dataExcluido;
@Column(name = "excluido", nullable = true, length = 1)
private Short excluido;
@Column(name = "id_funcionario_exclusao", nullable = true)
private Long idFuncionarioExclusao;
@OneToMany(mappedBy = "produto", cascade = CascadeType.REFRESH)
private List<FornecedorProduto> fornecedores;
}[/code]
Classe Estoque
[code]@Entity
@Table(schema = “public”, name = “estoque”)
public class Estoque implements java.io.Serializable {
@Id
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "id_produto", nullable = false)
private Produto produto;
@Column(name = "qtde_minima", nullable = false)
private Double quantidadeMinima;
@Column(name = "qtde_maxima", nullable = false)
private Double quantidadeMaxima;
@Column(name = "qtde_saldo", nullable = false)
private Double quantidadeSaldo;
@Column(name = "data_atualizacao", nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date dataAtualizacao;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "id_funcionario_atualizacao", nullable = true)
private Funcionario funcionarioAtualizacao;
}[/code]