Filtro de busca em hibernate

Bom dia pessoal.
Gostaria de saber de voces se é a melhor maneira ou se tem outras maneiras de se emplementar um metodo de filtro por busca usando hibernate. Veja o meu dominio.
Tenho uma classe DelegacaoAcesso que esta descrita a seguir:

[code]
public class DelegacaoAcesso implements Serializable{

private	Long id;
private boolean executado;
private boolean cancelado;
private Usuario usuarioDelegou;
private Usuario usuarioRecebe;
private Date dataInicial;
private Date dataFinal;

}[/code]

Eu tenho um metodo que vai efetuar uma busca a partir das propriedades que serão passadas pelo usuario.

DelegacaoAcesso filtro = new DelegacaoAcesso();
Usuario myUser = new Usuario();
Usuario toUser = new Usuario();

filtro.setUsuarioDelegou(myUser);
filtro.setUsuarioRecebe(toUser);

List<DelegacaoAcesso> delegados = service.listarDelegacoesAcesso(filtro);

Nesse meu bean que foi criado acima contem apenas duas propriedades setadas com valores, ou seja, ele deve buscar no banco todas as delegacoes que contem determinado usuarioDelegou e usuarioRecebe com valores, sem levar as outras propriedades.
O meu metodo de busca esta abaixo:

public List<DelegacaoAcesso> listarDelegacoesAcesso(final DelegacaoAcesso filtro) {
        Criteria criteria = session.createCriteria(DelegacaoAcesso.class)
				.add(Restrictions.eq("executado", true))
				.add(Restrictions.eq("cancelado", false));
	if (filtro.getUsuarioDelegou() != null) {
		criteria.createAlias("usuarioDelegou", "usuarioDelegou");
		criteria.add(Restrictions.eq("usuarioDelegou.id", filtro.getUsuarioDelegou().getId()));
	}
	if (filtro.getUsuarioRecebe() != null) {
			criteria.createAlias("usuarioRecebe", "usuarioRecebe");
			criteria.add(Restrictions.eq("usuarioRecebe.id", filtro.getUsuarioRecebe().getId()));
	}
	if (filtro.getDataInicial() != null) {
			criteria.add(Restrictions.eq("dataInicial", filtro.getDataInicial()));
	}
	if (filtro.getDataFinal() != null)
			criteria.add(Restrictions.eq("dataFinal", filtro.getDataFinal()));
	return criteria.list();
}

Nele eu vejo as propriedades que estao null e adiciono o complemento da query.
Particularmente eu nao gostei desse metodo, por isso venho solicitar a ajuda de voces nessa questao.

Obrigado.

Ola pessoal.
Consegui melhorar usando a class Example do hibernate. Que por sinal executa quase todas as comparacoes que preciso.
Obrigado a todos…

http://www.hibernate.org/hib_docs/v3/api/

Ate mais