[RESOLVIDO]criteria sqlRestriction 2 parametros

Gostaria de fazer um sqlRestriction passando 2 parâmetros, no meu caso só conseguir passar 1:

crit.add(Restrictions.sqlRestriction("to_char(DATASOLICITACAO,'dd/MM/yyyy HH:mi') = ?",data1, Hibernate.STRING));

eu gostaria que fosse assim:

crit.add(Restrictions.sqlRestriction("to_char(DATASOLICITACAO,'dd/MM/yyyy HH:mi') BETWEEN  ? AND ?",data1, Hibernate.STRING,data2, Hibernate.STRING));

porem da erro.

Há uma condição na criteria que utiliza o between porem com ela eu não sei como converter a data do campo do banco de dados igual o exemplo a cima:

to_char(DATASOLICITACAO,‘dd/MM/yyyy HH:mi’)

Ai fico indeciso pois não sei colocar 2 parâmetros no selRestriticion mais também não sei converter a data que vem do banco de dados que é timestamp.
Alguém pode me ajudar?

1 curtida
crit.add(Restrictions.between("dataSolicitacao", dataInicial,dataFinal));

dataInicial e dataFinal são do tipo util.Date.

       public List<Ponto> buscaPontosHoras2() throws ParseException {
        Session session;

        if (em.getDelegate() instanceof EntityManagerImpl) {
            EntityManagerImpl entityManagerImpl = (EntityManagerImpl) em.getDelegate();
            session = entityManagerImpl.getSession();
        } else {
            session = (Session) em.getDelegate();
        }
        Criteria crit = session.createCriteria(Ponto.class);
      
      
    
Calendar dataInicio = Calendar.getInstance();
Calendar dataFim = Calendar.getInstance();
SimpleDateFormat sdf1= new SimpleDateFormat("dd/MM/yyyy HH:mm");

dataInicio.set(Calendar.HOUR_OF_DAY, 12);
dataInicio.set(Calendar.MINUTE, 0);
dataInicio.set(Calendar.SECOND,0);
System.out.println("dataInicio "+sdf1.format(dataInicio.getTime()));

dataFim.set(Calendar.HOUR_OF_DAY, 12);
dataFim.set(Calendar.MINUTE, 10);
dataFim.set(Calendar.SECOND,0);
System.out.println("dataFim "+sdf1.format(dataFim.getTime()));

String data1 = sdf1.format(dataInicio.getTime());
String data2 = sdf1.format(dataFim.getTime());




       crit.createAlias("ocorrenciaLinks", "ol");

        crit.createAlias("ol.ocorrencia", "oco");
//        crit.add(Restrictions.sqlRestriction("to_char(DATASOLICITACAO,'dd/MM/yyyy HH:mi') = ?",data1, Hibernate.STRING));
        crit.add(Restrictions.between("oco.dataSolicitacao", data1,data2));
           System.out.println("RESULTADO: "+crit.list().size());
        return crit.list();
    }

na verdade minha dataInicial e dataFinal são do tipo calendar, pois no tipo calendar conseguir setar um tempo que é a data atual + a hora FIXA, depois disso coloco em data1 e data2 que são do tipo String, tenho um método que converte string para date porem da um erro também.

preciso pegar do meu banco de dados somente essas informações:

10/12/2013 12:10 e a data atual também tem que ser: 10/12/2013 12:10

pois no meu banco de dados armazena hora, minutos, segundo e até milésimos, e eu só preciso da hora e minutos, por isso estou tentando converter.

Eu recomendo você gravar como Data-Hora no banco e pegar como Data-Hora. Decida o que e como vai mostrar para o usuário na hora de mostrar, não na hora de buscar os dados.

Desculpe, esqueci de colocar como resolvido, eu consegui da seguinte forma:

public List<Ponto> buscaPontosHoras() {
        Session session;

        if (em.getDelegate() instanceof EntityManagerImpl) {
            EntityManagerImpl entityManagerImpl = (EntityManagerImpl) em.getDelegate();
            session = entityManagerImpl.getSession();
        } else {
            session = (Session) em.getDelegate();
        }


        Calendar bomDiaInicio = Calendar.getInstance();
        Calendar bomDiaFim = Calendar.getInstance();
        
        Calendar prtv1Inicio = Calendar.getInstance();
        Calendar prtv1Fim = Calendar.getInstance();
        
        Calendar prtv2Inicio = Calendar.getInstance();
        Calendar prtv2Fim = Calendar.getInstance();
        SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy HH:mm");

//inicio de cada jornais\\
// Bom dia Paraná 1 \\
        bomDiaInicio.set(Calendar.HOUR_OF_DAY, 1);
        bomDiaInicio.set(Calendar.MINUTE, 0);
        bomDiaInicio.set(Calendar.SECOND, 0);
// PRTV 1 \\
        prtv1Inicio.set(Calendar.HOUR_OF_DAY, 8);
        prtv1Inicio.set(Calendar.MINUTE, 1);
        prtv1Inicio.set(Calendar.SECOND, 0);
//PRTV 2 \\
        prtv2Inicio.set(Calendar.HOUR_OF_DAY, 14);
        prtv2Inicio.set(Calendar.MINUTE, 1);
        prtv2Inicio.set(Calendar.SECOND, 0);


// finais de cada jornais\\
        // Bom dia Paraná \\
        bomDiaFim.set(Calendar.HOUR_OF_DAY, 8);
        bomDiaFim.set(Calendar.MINUTE, 0);
        bomDiaFim.set(Calendar.SECOND, 0);
        // PRTV 1 \\
        prtv1Fim.set(Calendar.HOUR_OF_DAY, 14);
        prtv1Fim.set(Calendar.MINUTE, 0);
        prtv1Fim.set(Calendar.SECOND, 0);
       // PRTV 2 \\
        prtv2Fim.set(Calendar.HOUR_OF_DAY, 20);
        prtv2Fim.set(Calendar.MINUTE, 0);
        prtv2Fim.set(Calendar.SECOND, 0);

// string de conversões de calendario para String, o P no final significa parametro \\
        // Bom dia Paraná
        String bomDiaInicioP = sdf1.format(bomDiaInicio.getTime());
        String bomDiaFimP = sdf1.format(bomDiaFim.getTime());
        // PRTV 1 \\
        String prtv1InicioP = sdf1.format(prtv1Inicio.getTime());
        String prtv1FimP = sdf1.format(prtv1Fim.getTime());
        // PRTV 2 \\
        String prtv2InicioP = sdf1.format(prtv2Inicio.getTime());
        String prtv2FimP = sdf1.format(prtv2Fim.getTime());
    

        String sql = "SELECT PONTO.ID AS id, PONTO.COR AS cor,PONTO.ENDERECO AS endereco ,PONTO.FREQUENCIA AS frequencia ,PONTO.LATITUDE AS latitude, \n"
                + " PONTO.LONGITUDE AS longitude ,PONTO.PONTO AS ponto ,PONTO.ID_CIDADE AS cidade,PONTO.GRAU AS grau, \n"
                + " PONTO.ID_COMPLEMENTO AS complemento,PONTO.BAIRRO AS bairro,PONTO.SITE AS site \n"
                + "FROM OCORRENCIA \n"
                + "JOIN OCORRENCIALINK ON OCORRENCIA.ID_OCORRENCIALINK = OCORRENCIALINK.ID_OCORRENCIALINK \n"
                + "JOIN PONTO ON OCORRENCIALINK.ID_PONTOLINK = PONTO.ID \n"
                + "WHERE TO_CHAR(OCORRENCIA.DATASOLICITACAO,'dd/mm/yyyy hh24:mi') BETWEEN :bomDiaInicioP  AND  :bomDiaFimP \n"
                + "OR TO_CHAR(OCORRENCIA.DATASOLICITACAO,'dd/mm/yyyy hh24:mi') BETWEEN :prtv1InicioP  AND  :prtv1FimP \n"
                + "OR TO_CHAR(OCORRENCIA.DATASOLICITACAO,'dd/mm/yyyy hh24:mi') BETWEEN :prtv2InicioP  AND  :prtv2FimP \n "
                + "AND OCORRENCIA.STATUSOCORRENCIA = 1 \n"
                + "OR OCORRENCIA.STATUSOCORRENCIA = 2";
        SQLQuery query = session.createSQLQuery(sql);
        //PARAMETROS\\
        query.setParameter("bomDiaInicioP", bomDiaInicioP);
        query.setParameter("bomDiaFimP", bomDiaFimP);
        
        query.setParameter("prtv1InicioP", prtv1InicioP);
        query.setParameter("prtv1FimP", prtv1FimP);
        
        query.setParameter("prtv2InicioP", prtv2InicioP);
        query.setParameter("prtv2FimP", prtv2FimP);

        //SETANDO\\
        query.addScalar("id", Hibernate.LONG);
        query.addScalar("cor", Hibernate.STRING);
        query.addScalar("endereco", Hibernate.STRING);
        query.addScalar("frequencia", Hibernate.STRING);
        query.addScalar("latitude", Hibernate.STRING);
        query.addScalar("longitude", Hibernate.STRING);
        query.addScalar("ponto", Hibernate.STRING);
//        query.addScalar("cidade", Hibernate.OBJECT);
        query.addScalar("grau", Hibernate.STRING);
//        query.addScalar("complemento", Hibernate.OBJECT);
        query.addScalar("bairro", Hibernate.STRING);
        query.addScalar("site", Hibernate.BOOLEAN);
//        query.addScalar("STATUS", Hibernate.INTEGER);
//        query.addScalar("EMTESTE", Hibernate.INTEGER);
//        query.addScalar("ELEVACAO ", Hibernate.STRING);
//        query.addScalar("VISADA", Hibernate.INTEGER);
//        query.addScalar("PONTOSITE_ID", Hibernate.INTEGER);

        //TRANSFORMANDO\\
        query.setResultTransformer(Transformers.aliasToBean(Ponto.class));
        List<Ponto> resultado = query.list();

        System.out.println("RESULTADOS: " + resultado.size());
        
        return resultado;

    }

usei o calendar para setar as horas fixas do dia, depois fiz um SQL e funcionou, deu trabalho mais ta ai.
Obrigado por ajudar!