Estoy tratando de comparar Calendars con JPA2. La consulta parece algo así como que:

TypedQuery<X> q = em.createQuery("select r from Record r where r.calendar= :calendar", X.class);
Calendar c = foo(); //setting fields and stuff
q.setParameter("calendar", c);

Esto, sin embargo, se compara la fecha + hora. Quiero saber si estoy en MM:DD:AAAA es igual y no se preocupan por el tiempo. Hay una buena manera de hacer que en JPA2 o tengo que crear una consulta nativa?

Traté de configuración HH:MM:SS:… a cero antes de guardar en la db, pero no sé si esto es muy sabio, con respecto a las zonas de tiempo y horario de verano y esas cosas.

OriginalEl autor atamanroman | 2011-05-04

5 Comentarios

  1. 26
    q.setParameter("calendar", c, TemporalType.DATE)

    Puede pasar el TemporalType.FECHA de setParameter método para truncar la fecha+hora.

    creo que no su trabajo cuando usted tiene @Temporales(TemporalType.Fecha y hora) de anotación en la columna de la definición de la entidad. ¿Sabes cómo solucionar este caso?

    OriginalEl autor Otávio Garcia

  2. 8

    No hay ninguna mención de DateTime funciones que permiten hacer que en la especificación de JPQL, pero siempre se puede engañar y hacer

    select r from Record r where r.calendar >= :theDayAtZeroOClock and r.calendar < :theDayAfterAtZeroOClock

    OriginalEl autor JB Nizet

  3. 0

    Tuve que usar date_trunc en la cláusula where:

        TypedQuery<X> q = em.createQuery("select r from Record r where date_trunc('day',r).calendar= :calendar", X.class);
    Calendar c = foo(); //setting fields and stuff
    q.setParameter("calendar", c, TemporalType.DATE);
    Que el proveedor está utilizando?
    estoy usando hibernate

    OriginalEl autor Roger

  4. 0

    Mi solución trabajado con spring data jpa @de consulta:

    select * from table_name where substring(something.date, 1,10) = substring(date_from_param, 1,10)

    Funciona bien, pero tienes que estar seguro de que fecha es siempre en el formato adecuado.

    OriginalEl autor RichardK

  5. 0

    Mysql y H2 compatible comparación de las fechas de ignorar parte del tiempo:

    `@Query("SELECT DISTINCT s " +
            "FROM Session s " +
            "JOIN s.movie m " +
            "WHERE m.id = :movie AND CAST(s.time AS date) = CAST(:date AS date) " +
            "ORDER BY s.time")
    List<Session> getByMovieAndDate(@Param("movie") Long movie, @Param("date") LocalDateTime date);`

    OriginalEl autor pshvetso

Dejar respuesta

Please enter your comment!
Please enter your name here