Selecionando registros com critérios de campos Data no Hibernate 3

Senhores,

Estou fazendo testes com Hibernate para efetuar busca para grande quantidade de registros (mais de 1000000), no entanto encontrei dificuldades ao utilizar o critério de busca para campos que armazenam datas. “crit.add(Expression.between(“livroDiarioPK.ldiaDatLancto”,data, data2));”.

Quando incluída esta linha, é retornado um valor nulo para a lista. Caso esta linha seja removida, o resultado é apresentado corretamente (filtro por empsCod e filiCod).

Gostaria por que ao utilizar esta linha ocorre este erro?

Abaixo segue o código completo.

Valew :shock:.

public List<LivroDiario> procuraTodos(int inicial){
    Calendar data = new GregorianCalendar(2005,12,01);
    Calendar data2 = new GregorianCalendar(2005,12,05);

    session.flush();
    session.clear();
    
    // Critério para seleção
    Criteria crit = this.session.createCriteria(LivroDiario.class);
    crit.setMaxResults(1000);
    crit.setFirstResult(inicial);
    crit.add(Restrictions.eq("livroDiarioPK.empsCod","001"));
    crit.add(Restrictions.eq("livroDiarioPK.filiCod","002"));

    crit.add(Expression.between("livroDiarioPK.ldiaDatLancto",data, data2));

    List lista = crit.list();
    
    return lista;
}

passe objetos Date para a criteria não Calendar.

outra coisa, evite fazer o between, ele é custoso para o banco. Use < e >.

Marcelo, você poderia apresentar números provando isso? Não sou nenhum expert em banco de dados(thingol!!), mas até onde sei, isso não passa de uma lenda urbana que valia até a aversão 7 ou 8 do Oracle, quando o otimizador dele era tosco.