StringBuilder hql = new StringBuilder();
hql.append(" FROM ").append(Declaracao.class.getSimpleName()).append(" dcl ");
hql.append(" WHERE 1 = 1 ");
if (filtro.getDataDeclaracao() != null) {
if (filtro.getDataDeclaracao().getDe() != null) {
hql.append(" AND dcl.dataCadastro >= :dataDeclaracaoDe ");
parametros.put("dataDeclaracaoDe", filtro.getDataDeclaracao().getDe());
}
if (filtro.getDataDeclaracao().getAte() != null) {
hql.append(" AND dcl.dataCadastro <= :dataDeclaracaoAte ");
parametros.put("dataDeclaracaoAte", filtro.getDataDeclaracao().getAte());
}
}
Gerando um SQL similar a este:
select * from DECLARACAO where DEC_DT_CADASTRO >= ‘07/01/2018’ and DEC_DT_CADASTRO <= ‘07/01/2018’
Mesmo tendo uma declaração com a data de ‘07/01/2018’, ele não retorna nenhum registro.
Mas se a consulta é gerada assim, retorna 1 registro.
select * from DECLARACAO where DEC_DT_CADASTRO >= ‘07/01/2018’ and DEC_DT_CADASTRO <= ‘08/01/2018’
Banco de dados é Oracle. O que pode de ser ?
1 curtida
O campo no banco é de que tipo? está com data e hora?
1 curtida
não seria:
select * from DECLARACAO where DEC_DT_CADASTRO >= ‘07/01/2018’
a data entre 07/01/2018 e 07/01/2018 é 07/01/2018 mesmo
Pelo comportamento, eu diria que algum destes Date está com hora.
Verifique o valor usado nos parametros e no campo do banco (Date em java compreende data e hora).
Porque na pesquisa existe o campo Data inicio e Data fim, para serem consultados no mesmo campo.
A questão é que está indo com a data escolhida e é informado o tempo 07/01/2018 00:00:00.
O modelo está como Date e DTO está como Timestamp. Quem informa a pesquisa é o DTO, assim pesquisando no modelo que é Date.
faz um teste, executa diretamente no banco a seguinte sql:
select * from DECLARACAO where cast(DEC_DT_CADASTRO as DATE) between ‘07/01/2018’ and ‘07/01/2018’
*só não sei se no Oracle é assim o cast.
Resolvi assim: com o trunc
StringBuilder hql = new StringBuilder();
hql.append(" FROM ").append(Declaracao.class.getSimpleName()).append(" dcl ");
hql.append(" WHERE 1 = 1 ");
if (filtro.getDataDeclaracao() != null) {
if (filtro.getDataDeclaracao().getDe() != null) {
hql.append(" AND trunc(dcl.dataCadastro) >= :dataDeclaracaoDe ");
parametros.put("dataDeclaracaoDe", filtro.getDataDeclaracao().getDe());
}
if (filtro.getDataDeclaracao().getAte() != null) {
hql.append(" AND trunc(dcl.dataCadastro) <= :dataDeclaracaoAte ");
parametros.put("dataDeclaracaoAte", filtro.getDataDeclaracao().getAte());
}
}