Subqueries notExists Hibernate

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]