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

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?

olá, thejokerbm

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

obrigado

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í.

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

[quote=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

[/quote]

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…

ok, valeu!

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.

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