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…
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