Estou fazendo uma consulta usando o criteria do hibernate 3.6:
Criteria crit = getSession().createCriteria(ParametrizacaoEntity.class);
crit.setFetchMode("produtoRegua", FetchMode.JOIN);
Criterion codProd = Restrictions.eq("id.Prod", parametrizacao.getId().getCodProduto());
Criterion codGrupo = Restrictions.eq("id.iGroup", parametrizacao.getId().getIdGrupo());
Criterion nomeCampo = Restrictions.eq("id.nameField", parametrizacao.getId().getNomeCampo());
Criterion nomeTabela = Restrictions.eq("id.tableName", parametrizacao.getId().getIdTabela());
if(parametrizacao.getId().getCodProduto() != null){
crit.add(codProd);
}
if(parametrizacao.getId().getIdGrupo() != null){
crit.add(codGrupo);
}
if(parametrizacao.getId().getNomeCampo() != null){
crit.add(nomeCampo);
}
if(parametrizacao.getId().getIdTabela() != null){
crit.add(nomeTabela);
}
List<ParametrizacaoEntity> lista = crit.list();
Se eu não tratar o campo do objeto passado como parâmetro se é nulo, ele está montando a query utilizando o mesmo. Por exemplo, codProd posso passar o parâmetro do objeto como null, seria interessante o hibernate ignorar o parâmetro não o adicionando a query, o que não está ocorrendo. A query está sendo montada como codProd == null, trazendo os dados errados. Existe alguma configuração para que os parâmetros informados como null sejam ignorados no criteria, nesse caso minha consulta ficaria assim:
Criteria crit = getSession().createCriteria(ParametrizacaoEntity.class);
crit.setFetchMode("produtoRegua", FetchMode.JOIN);
Criterion codProd = Restrictions.eq("id.Prod", parametrizacao.getId().getCodProduto());
Criterion codGrupo = Restrictions.eq("id.iGroup", parametrizacao.getId().getIdGrupo());
Criterion nomeCampo = Restrictions.eq("id.nameField", parametrizacao.getId().getNomeCampo());
Criterion nomeTabela = Restrictions.eq("id.tableName", parametrizacao.getId().getIdTabela());
//caso os parâmetros sejam null o critério seria ignorado, não sendo necessário tratá-los.
crit.add(codProd);
crit.add(codGrupo);
crit.add(nomeCampo);
crit.add(nomeTabela);
List<ParametrizacaoEntity> lista = crit.list();