[RESOLVIDO] Usar o SimpleDateFormat em consulta JPA

11 respostas
J

Oi pessoal, esbarrei com uma questão aqui que num sei pra onde correr!

Seguinte tenho isso:

@Column(name = "dat_feriado", nullable = true)
 @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date datFeriado;

Na entidade Feriado.

Como é TIMESTAMP a data é salva assim ex:
22/11/2009 00:00:00
Só que eu gostaria de fazer uma consulta com JPA onde eu comparo somente a data 22/11/2009 com uma que eu passo para verificação, ignorando a HH:mm:ss

Já estou fazendo isto:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
Query query = entitymanager.createNamedQuery(
                            "SELECT " +
                            "f.tipFeriado " +
                            "FROM " +
                            "Feriado f " +
                            "WHERE " +
                            "f.datFeriado = :PDat_Dia");
                    query.setParameter("PDat_Dia", simpleDateFormat.format(PDat_Dia));

faltaria fazer um SimpleDateFormat no f.datFeriado só que nao sei fazer isso na consulta.
Alguem teria uma dica?

Obrigado desde já!!!

11 Respostas

H

Mais o campo tinha que ser TIMESTAMP? pq não poderia ser somente DATE?

J

Porque o horario é o que usarei na aplicação. Preciso trazer todos desta data comparada!!!

Os horario serão usados na aplicação para comparações!!!

Deu pra entender?

B

Cara, bom não tenho muito conhecimento sobre isso, ou se tem um jeito mais facil...
Mas se você ainda não achou nenhuma solução, talvez se você transformar a data em timestamp, cria inicio e fim do dia e mandar comparar...

Calendar c = Calendar.getInstance();
		c.setTime(datFeriado);
		c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
		
		Date inicioDia = c.getTime();
		
		c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
		Date fimDia = c.getTime();
Query query = entitymanager.createQuery(  
                             "SELECT f.tipFeriado FROM Feriado f WHERE f.datFeriado >= :inicioDia AND f.datFeriado <= :fimDia");  
          query.setParameter("inicioDia", inicioDia);  
          query.setParameter("fimDia", fimDia);

Ai você tenta comparar a data do banco com ela.
Desculpe se eu falei besteira, mais tenta ai...
Se der certo você avisa ai...
Abraçoo

J

Da forma que disse num vai me resolver!!!

Preciso alinha o que vem do bd!!! O que voce fez ai num trata o dado que é pego na consulta!

B

Qual banco você está utilizando ?? É o oracle ?

R

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy"); Query query = entitymanager.createNamedQuery( "SELECT " + "f.tipFeriado " + "FROM " + "Feriado f " + "WHERE " + "to_date(f.datFeriado) = to_date(:PDat_Dia, 'dd/MM/yyyy')"); query.setParameter("PDat_Dia", simpleDateFormat.format(PDat_Dia));

Bom… não lembro direito… Mas o to_date transforma tanto string quando timestamp em date… ele trunca a data e retira as horas

J

O banco em questão é Oracle 9i.

Vou testar aqui este to_date

R

jonatha.chaves:
O banco em questão é Oracle 9i.

Vou testar aqui este to_date

Só não esqueça de colocar tanto para os dados da produção quanto para o parametro… e observe que eu forcei a mascara da data porque dependendo do idioma do computador, os meses e os dias invertem… como ingles por exemplo

B

Também iria sugerir a você utilizar o to_date …

L

isso usa o to_date que resolve.

J

Valeu pessoal, deu certinho o to_date(), deu até para inventar umas coisas!!!

Criado 25 de março de 2010
Ultima resposta 30 de mar. de 2010
Respostas 11
Participantes 6