Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

select entre datas

Oque tem de errado com esta querie. Não ocorre erro, acho que o query.getResultList() não retorna nada.

public class TestaConsultaPorData {

    public static void main(String[] args) {

         Calendar endDate = Calendar.getInstance(); // data final
         Calendar startDate = Calendar.getInstance();
         startDate.set(2014, 12, 02, 0, 0,0); // data inicio
        EntityManager manager = new JPAUtil().getEntityManager();
        manager.getTransaction().begin();
        Query query =  manager.createQuery("select m from Movimentacao m where m.data BETWEEN :pStartData AND :pEndData ");
        query.setParameter("pStartData",startDate,TemporalType.TIMESTAMP);
        query.setParameter("pEndData",endDate,TemporalType.TIMESTAMP);



        @SuppressWarnings("unchecked")
        List<Movimentacao> movimentacoes = query.getResultList();
        for (Movimentacao m : movimentacoes) {
            System.out.println( "Data : " + m.getData());
            System.out.println("Cliente : " + m.getNomeCliente());
            System.out.println("Produto : " + m.getNomeProduto());
            System.out.println("Funcionario: " + m.getNomeFuncionario());

        }
ibernate: 
    select
        movimentac0_.id as id1_2_,
        movimentac0_.cliente_id as cliente8_2_,
        movimentac0_.data as data2_2_,
        movimentac0_.funcionario_id as funciona9_2_,
        movimentac0_.nomeCliente as nomeClie3_2_,
        movimentac0_.nomeFuncionario as nomeFunc4_2_,
        movimentac0_.nomeProduto as nomeProd5_2_,
        movimentac0_.pagamento as pagament6_2_,
        movimentac0_.preco as preco7_2_,
        movimentac0_.produto_id as produto10_2_ 
    from
        Movimentacao movimentac0_ 
    where
        movimentac0_.data between ? and ?

tabela:

+----+---------------------+-------------+-----------------+---
| id | data                | nomeCliente | nomeFuncionario | no
+----+---------------------+-------------+-----------------+---
|  1 | 2014-12-02 14:28:28 | jose        | Aparicio        | co
|  2 | 2014-12-02 14:32:01 | jussara     | jussara         | co
|  3 | 2014-12-02 14:33:10 | aparicio    | maria           | un
|  4 | 2014-12-03 09:28:06 | aparicio    | maria           | un
|  5 | 2014-12-03 09:28:19 | jose        | maria           | un
+----+---------------------+-------------+-----------------+---
3 respostas

Cara, bão estou muito certo do que vou falar aqui, mas tente isso: em Calendar startDate em vez de pegar a instância, coloque um new Calendar.

Calendar startDate = new Calendar();

outra coisa que pode está acontecendo é o tipo TemporalType.TIMESTAMP no parâmetro. Tente o tipo TemporalType.DATE, se não me engano, assim, ele ignora a parte da data e faça seu select convertendo para Data em vez de Timastamp.

select m from Movimentacao m where date(m.data) BETWEEN :pStartData AND :pEndData

ou se for hql

select m from Movimentacao m where new Date(m.data) BETWEEN :pStartData AND :pEndData
solução!

Calendar é estática e não pode ser instanciada. os meses na Calendar são jan = 0 dez = 11, eu estava usando dez = 12, por isso não fazia o select.

hum, blz. é isso mesmo.. comi mosca, hehe

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software