Boa tarde !
Estou com um problema aparentemente simples mas estou conseguindo soluciona-lo e, acredito que alguem já passou pelo mesmo por isso aqui posto meu apelo !!! ME AJUDEM !!!
Meu usuario pode informar em uma view de pesquisa a data de forma parcial, por Exemplo 2010, 07/2010, 30/07/2010
e no meu bean eu monto a pesquisa da seguinte forma:
String data;
…
Query q = em.createQuery(“select object(o) from Cliente as o Where to_char(data,‘dd/mm/yyyy’) like '%”+data+"’%");
return q.getResultList();
…
Preciso utilizar a função TO_CHAR para converter um tipo DATE em STRING, para desta forma, utilizar o LIKE. Ai é que está o problema, o MALDITO DO JPA não está aceitando a função TO_CHAR.
Alguem tem alguma idéia de como resolver este problema ?
Bom, Você pode usar Native Query, mas pq usar um Like em um campo date?
Não é melhor repensar isso?
Cara JPA não é SQL, a função to_char é coisa de SQL, vc pode simplesmente criar o seguinte metodo na sua classe Cliente
public String getStrData(){
return new SimpleDateFormat("dd/MM/yyyy").format(data);
}
E sua query ficaria assim
Query q = em.createQuery("select object(o) from Cliente as o Where o.strData like '%"+data+"'%");//Lembrando do padrão JavaBeans
return q.getResultList();
Você não está misturando a forma de se usar SQL e JPA? Porque não utilizar um Calendar ao invés de uma String para data? Repare que não é dificil:
Query query = em.createQuery("from Categoria c where c.nascimento = :data");
query.setParameter("data", Calendar.getInstance()); // tratar aqui a data de forma adequada
return query.getResultList();
Assim você pode transformar a data recebida em um Calendar, e então passa ele como parâmetro. Outra coisa, não use concatenações na query.
Flw! :thumbup:
Obrigado pessoal pelas dicas, consegui resolver o problema usando o createNativeQuery que aceita as funções do SQL na elaboração da consulta.