JPA - JPQL: dúvida em relação ao tipo Date

7 respostas
R

Galera estou com a seguinte dúvida: tenho um objeto com um atributo tipo Date (e naturalmente uma tabela correspondente no bd com uma coluna do mesmo tipo).
Minha pergunta é como fazer um select do tipo: quero os objetos cujas datas tem o mês de novembro, de um ano e dia quaisquer; ou ainda, quero os objetos dos dias 5 ao 10 de um mês e ano quaisquer, etc…

como fazer esse tipo de consulta usando jpql?

7 Respostas

R

olá, thejokerbm

estou usando jdbc puro. vc poderia exemplificar como ficaria a query jpql?

obrigado

F

pode ser algo como:

select u from User u where month(u.dateOfBirth) = 10

Não me lembro se o mês começa em 0 ou 1, testa aí.

R

fabiosilva, são exatamente essas funções que estava procurando. Testei aqui, mas ta sempre retornando uma list vazia

Query q = em.createQuery("SELECT p FROM Produto p WHERE month(p.date) >= 0 ");    //tem que trazer todos
List<Produto> ls = q.getResultList();
System.out.println(ls.size());
//output: 0
F

Rafael Nascimento:
fabiosilva, são exatamente essas funções que estava procurando. Testei aqui, mas ta sempre retornando uma list vazia

Query q = em.createQuery("SELECT p FROM Produto p WHERE month(p.date) >= 0 ");    //tem que trazer todos
List<Produto> ls = q.getResultList();
System.out.println(ls.size());
//output: 0

Tem razão. Fui dar uma olhada na especificação e a função month() ainda não foi implementada no jpql, apenas no hql do Hibernate. Algo que você pode tentar é criar um atributo transiente na classe Produto que retorna o mês do mesmo, e então usar esse atributo no jpql…

R

ok, valeu!

T

Qual ORM vc está usando se for o Hibernate vc pode fazer usando criteria, ou no HQL mesmo, se tiver no JDBC puro vc pode fazer usando a classe date mesmo, ela tem os metodos getDay getMonth e etc.

T
List allEvents = entityManager.createQuery(SELECT e FROM Events e WHERE e.eventsDate BETWEEN :startDate AND :endDate)

.setParameter(startDate, startDate, TemporalType.DATE)

.setParameter(endDate, endDate, TemporalType.DATE)

.getResultList();

startDate e endDate sao do tipo Date.

vlw

Criado 22 de julho de 2011
Ultima resposta 22 de jul. de 2011
Respostas 7
Participantes 3