Ajuda com Criteria

Prezados,

Estou tentando fazer uma consulta com criteria e estou esbarrando num pequeno problema. Seguinte, tenho o seguinte atributo na classe.

@JoinColumn(name = "ID_ORDEM_FISCALIZACAO", referencedColumnName = "ID_ORDEM_FISCALIZACAO") 
@ManyToOne(optional = false)
private OrdemFiscalizacao ordemFiscalizacao;

Só que na consulta eu desejo trazer também os registros onde a “ordemFiscalizacao” for nula, pois apesar der uma FK este campo pode ser null no BD.
Porem o Hibernate não traz estes registros. Segue o código da minha consulta:

public List<AcaoFiscalizatoria> listar(PesquisaAcaoFiscalizatoria pesquisa) {
		Criteria criteria = this.session.createCriteria(AcaoFiscalizatoria.class);
		 
		Criteria subCriteriaOrdemFiscalizacao =  criteria.createCriteria ("ordemFiscalizacao");
		if (pesquisa.getOrdemFiscalizacaoSelecionada() != null) {			
			subCriteriaOrdemFiscalizacao.add(Restrictions.eq("numero", pesquisa.getOrdemFiscalizacaoSelecionada().getNumero())); 
		} 
		
		if (pesquisa.getDataInicioOrdemFiscalizacao() != null) {
			subCriteriaOrdemFiscalizacao.add(Restrictions.eq("dataInicio", pesquisa.getDataInicioOrdemFiscalizacao()));
		}
		
		if (pesquisa.getOperacaoSelecionada() != null) {
			criteria.add(Restrictions.eq("operacao", pesquisa.getOperacaoSelecionada()));
		}
		
		if (pesquisa.getUnidadeIbamaSelecionada() != null) { 
			criteria.add(Restrictions.eq("unidadeIbama", pesquisa.getUnidadeIbamaSelecionada())); 
		}
		
		if (pesquisa.getMunicipioSelecionado() != null) { 
			criteria.add(Restrictions.eq("municipio", pesquisa.getMunicipioSelecionado())); 
		}
				
		if (pesquisa.getFiscalSelecionado() != null) {
			Criteria subCriteriaEnvolvido =  criteria.createCriteria("envolvidoList");
			subCriteriaEnvolvido.add(Restrictions.eq("fiscal", pesquisa.getFiscalSelecionado()));
		}	
		
		if (pesquisa.getDataInicial() != null && pesquisa.getDataFinal() != null) {
			Calendar dataInicial = Calendar.getInstance();
			dataInicial.setTime(pesquisa.getDataInicial());			
			dataInicial.set(Calendar.HOUR, 0);   
			dataInicial.set(Calendar.MINUTE, 0);   
			dataInicial.set(Calendar.SECOND, 0);   
			Date dataInicialFormatada = dataInicial.getTime();  			
			
			Calendar dataFinal = Calendar.getInstance();
			dataFinal.setTime(pesquisa.getDataFinal());	
			dataFinal.set(Calendar.HOUR, 23);   
			dataFinal.set(Calendar.MINUTE, 59);   
			dataFinal.set(Calendar.SECOND, 59);   
			Date dataFinalFormatada = dataFinal.getTime();	
			
			criteria.add(Restrictions.between("data", dataInicialFormatada, dataFinalFormatada));
		}	
		
		if (pesquisa.getSituacaoSelecionada() != null) {			
			criteria.add(Restrictions.eq("situacao", pesquisa.getSituacaoSelecionada().getCodigo())); 
		}
	
		criteria.addOrder(Order.asc("data"));  
		criteria.addOrder(Order.asc("numero"));  
	
		return criteria.list();
	}
        getSession().createCriteria(Book.class)
                .add(Restrictions.or(
                        Restrictions.eq("description", description), 
                        Restrictions.isNull("description"))
                ).uniqueResult();

Nesse exemplo traz um resultado igual ao parâmetro “description” OU se o campo “description” no banco estiver null.

[quote=romarcio] getSession().createCriteria(Book.class) .add(Restrictions.or( Restrictions.eq("description", description), Restrictions.isNull("description")) ).uniqueResult();

Nesse exemplo traz um resultado igual ao parâmetro “description” OU se o campo “description” no banco estiver null.[/quote]

Olá Romarcio!

Adicionei a restrição abaixo, mas aí para de trazer todos os registros.

Isso porque o Hibernate criou um select nas colunas da Ordem de Fiscalização, sacou? Se eu conseguir fazer com que ele não selecione as colunas da Ordem de Fiscalização, aí sim, creio que irá funcionar.

Se você não usar o OR ele vai trazer apenas os registros que são isNull.