Select em JPQL com BETWEEN entre datas

4 respostas
maurijava

Pessoal,

O que eu estou fazendo de errado???

public List<StatusEquipamento> getStatusEquipamentoPeriodo(Date dateBegin, Date dateEnd) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object (o) from StatusEquipamento o where "
                    + "o.DATA between :" + dateBegin + " AND " + ":" + dateEnd)
                    .setParameter("dateBegin", dateBegin, TemporalType.DATE)
                    .setParameter("dateEnd", dateEnd, TemporalType.DATE);
            return q.getResultList();
        } finally {
            em.close();
        }
    }

Olha o erro que está dando:

Internal Exception: MissingTokenException(inserted [@-1,0:0=’’,<6>,1:69] at Jun)

at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1378)

at br.com.mda.controler.StatusEquipamentoJpaController.getStatusEquipamentoPeriodo(StatusEquipamentoJpaController.java:152)

at Main.main(Main.java:38)

Caused by: Exception [EclipseLink-8024] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.JPQLException

Exception Description: Syntax error parsing the query [select object (o) from StatusEquipamento o where o.DATA between :Sun Jun 09 17:38:13 GMT-03:00 3912 AND :Mon Jun 10 17:38:13 GMT-03:00 3912], line 1, column 69: syntax error at [Jun].

Segue o código que chama o metodo:

public class Main {
    
private static StatusEquipamentoJpaController jpaController = null;
private static List resultadoPesquisa = null;


    public static void main(String [] args){
       Date data1 = new Date();
       Date data2 = new Date();
        
       data1.setDate(9);
       data1.setMonth(5);
       data1.setYear(2012);
       
       data2.setDate(10);
       data2.setMonth(5);
       data2.setYear(2012);
       
       resultadoPesquisa = getJpaController().getStatusEquipamentoPeriodo(data1, data2);
       
        for (int i = 0; i < resultadoPesquisa.size(); i++) {
            System.out.println("Resultado: " + resultadoPesquisa.get(i));
        }
       
    
}
    
    
    private static StatusEquipamentoJpaController getJpaController() {
        if (jpaController == null) {
            jpaController = new StatusEquipamentoJpaController(Persistence.createEntityManagerFactory("ControleEquipamentosPU"));
        }
        return jpaController;
    }
}

Sds,

Maurijava

4 Respostas

pmlm
Hebert_Coelho

Aqui mostra: JPA Consultas e Dicas

Olha na página 7

maurijava

pmlm,

Fiz do jeito que você disse, mas deu esse erro:

[EL Info]: 2012-10-31 21:28:03.899ServerSession(9616314)EclipseLink, version: Eclipse Persistence Services - 2.2.0.v20110202-r8913

[EL Info]: 2012-10-31 21:28:04.195ServerSession(9616314)file:/C:/Users/mda/Documents/NetBeansProjects/ControleEquipamentos/build/web/WEB-INF/classes/_ControleEquipamentosPU login successful

Exception in thread main java.lang.IllegalStateException: Query argument dateBegin not found in the list of parameters provided during query execution.

at org.eclipse.persistence.internal.jpa.EJBQueryImpl.processParameters(EJBQueryImpl.java:826)

at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:409)

at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:741)

at br.com.mda.controler.StatusEquipamentoJpaController.getStatusEquipamentoPeriodo(StatusEquipamentoJpaController.java:156)

at Main.main(Main.java:38)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

Hebert Coelho,

Fiz do jeito que tu mostra lá no tutorial, tá bem legal, bem explicado. Porém no meu caso eu usei uma NamedQuery com apenas um argumento, uma data, não deu erro, mas não retornou nada…

Fiquei com dúvida para o caso de usar os dois argumentos do between, como se faz neste caso? você poderia colocar um exemplo com between?

Grato,

Maurijava.

Hebert_Coelho

maurijava:
Hebert Coelho,

Fiz do jeito que tu mostra lá no tutorial, tá bem legal, bem explicado. Porém no meu caso eu usei uma NamedQuery com apenas um argumento, uma data, não deu erro, mas não retornou nada…

Fiquei com dúvida para o caso de usar os dois argumentos do between, como se faz neste caso? você poderia colocar um exemplo com between?

Grato,

Maurijava.

No mesmo post tem. Se não tá trazendo valor, pode ser que o valor pesquisado não está lá.

Criado 28 de outubro de 2012
Ultima resposta 31 de out. de 2012
Respostas 4
Participantes 3