Quiero realizar operaciones en tiempo usando hibernate HQL.

Quiero sumar y restar dos fechas así como quiero restar 1 año o 1 mes a partir de una fecha determinada.

¿Cómo es esto posible con HQL en modo de hibernación?

OriginalEl autor amar4kintu | 2009-06-24

8 Comentarios

  1. 5

    Ver
    La realización de Fecha/Hora de Matemáticas En HQL?
    para un ejemplo.

    Utilizar sql personalizada debe escribió un propio hibernate dialecto y registro:

    registerFunction("weekday", 
      new SQLFunctionTemplate(Hibernate.INTEGER, "to_char(?1,'D')") );
    Sí.. yo vi ese enlace, pero en modo de Hibernación no hay ninguna disposición dada por la adición o sustracción de fecha correctamente. supongo que si quiero un día antes de que un año de uso current_timestamp() de HQL. ¿Qué se debe hacer como no hay ninguna función adicional dado por eso. ¿Hay alguna manera mejor? Gracias.
    Hola, en el siguiente enlace que he encontrado la descripción detallada de la creación personalizada de hibernación, en dialecto de sql server. Esto se explica en la última respuesta del enlace. Espero que ayude a alguien. forums.hibernate.org/viewtopic.php?f=1&t=995494
    Hola amar4kintu, si mi respuesta ha ayudado, por favor, puedes votar o marque la respuesta con la marca de verificación verde?

    OriginalEl autor H2000

  2. 8

    Usted necesita para crear su propio dialecto. Algo parecido a lo siguiente:

    public class MyDialect extends MySQLInnoDBDialect{
          public myDialect() {
          super();
          registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_add(?1, INTERVAL ?2 ?3)"));
          }
        }
    Genial … ahora, ¿cómo se utiliza esto en código … una pequeña muestra, si es posible

    OriginalEl autor z5h

  3. 4

    En Hibernate/MySQL (por lo menos)
    Usted puede convertir a y desde un Timestamp de Unix. Desde el timestamp unix es un entero puede agregar un número entero de segundos.

    FROM_UNIXTIME(UNIX_TIMESTAMP(date)+ (allowedTimeWindow*86400)) as deadline

    Tiene sus limitaciones, pero es mucho más fácil que los enfoques anteriores.

    OriginalEl autor Dean Mathieson

  4. 4

    Este es un tema abierto en modo de Hibernación. Como de Hibernación 3.3 no hay una manera estándar para manejar las comparaciones de fecha puramente en HQL:

    https://hibernate.atlassian.net/browse/HHH-2434

    Hibernate 4.3 ofrece funciones para el acceso de Fecha/Hora en HQL que son:

    current_timestamp() , current_date() , current_time()

    Las operaciones aritméticas pueden ser gestionado por:

    SECOND(...) , MINUTE(...) , HOUR(...) , DAY(...) , MONTH(...) , YEAR(...)

    OriginalEl autor Fred Haslam

  5. 1

    Descargo de responsabilidad: yo soy un Java novato

    Yo era capaz de utilizar current_date() >= fromDate AND dateadd(day, -1, getdate()) <= toDate en un HQL declaración en contra de un Sybase db en modo de Hibernación 3.5.3, sin registrar ninguna de las funciones.

    OriginalEl autor foson

  6. 0

    Uso de la muestra de acercamiento con el dialecto de JPA + Hibernate 4.3.1 + MySQL 5

    clase pública SampleMySQL5InnoDBDialect se extiende org.hibernate.dialecto.MySQL5InnoDBDialect {

    public SampleMySQL5InnoDBDialect() {
        super();
        registerFunction("date_sub_days", new SQLFunctionTemplate(StandardBasicTypes.DATE, "date_sub(?1, interval ?2 day)"));
    }

    luego de su clase con anotaciones de correlación:

    @NamedQuery(name = "SampleEntity.getSampleEntitiesForGapOverlapCalculations", query = "from SampleEntity as se where "
        + "((se.toDate between :startDate and :endDate) or (date_sub_days(se.toDate, se.duration) between :startDate and :endDate)) order by se.toDate asc, se.duration desc")

    SampleEntity ha día campo de tipo java.sql.Fecha y duración campo entero (duración en días) y estamos calculando fromDate = día – duración y seleccionar todas las entidades que han fromDate o día dentro del intervalo de [startDate, endDate].

    OriginalEl autor ydrozhdzhal

  7. 0

    Hibernate4.3 proporciona funciones nativas para Fechas de acceso/las marcas de tiempo y para realizar arithmatic operaciones sobre ellos

    Aquí es el enlace a la documentación de lo que se pueden utilizar expresiones en HQL.
    Pocos de los que estoy mencionando:
    Para acceder a fecha/hora:

    current_date(), current_time(), and current_timestamp()

    Las operaciones aritméticas se puede hacer siguiendo. Estas funciones toman el Tiempo como entrada:

    second(...), minute(...), hour(...), day(...), month(...), and year(...)

    Uno puede obtener la diferencia absoluta de en HQL por

    current_timestamp() - dateInstance

    donde dateInstance puede tener la definición de

    @Column(name = "updated_at")
    @Temporal(TemporalType.TIMESTAMP)
    private java.util.Date updatedAt;

    El resultado es de 0.1 segundos. Así, por una diferencia absoluta de 1 segundo, la expresión anterior dará como resultado 10.

    Para una consulta quedaría así :

    select t from Table t where (current_timestamp() - updatedAt)>600

    OriginalEl autor Nikhil Sahu

  8. 0

    Postgres usuarios…

    registerFunction("dateadd", new SQLFunctionTemplate(StandardBasicTypes.DATE, "(?1 + INTERVAL ?2)"));

    con el uso de SQL como:

    now() < dateadd(:mydate, '-1 day')

    OriginalEl autor Joseph Valerio

Dejar respuesta

Please enter your comment!
Please enter your name here