Estoy tratando de convertir a la siguiente consulta SQL para HQL y estoy teniendo un par de problemas. Una línea recta por la conversión de la línea no funciona, me pregunto si debería estar utilizando una combinación Interna en el HQL?

        SELECT (UNIX_TIMESTAMP(cosc1.change_date) - UNIX_TIMESTAMP(cosc2.change_date)) 
        FROM customer_order_state_change cosc1  
        LEFT JOIN customer_order_state cos1_new on cosc1.new_state_id = cos1_new.customer_order_state_id  
        LEFT JOIN customer_order_state cos1_old on cosc1.old_state_id = cos1_old.customer_order_state_id  
        LEFT JOIN customer_order_state_change cosc2 on cosc2.customer_order_id = cosc1.customer_order_id  
        LEFT JOIN customer_order_state cos2_new on cosc2.new_state_id = cos2_new.customer_order_state_id  
        LEFT JOIN customer_order_state cos2_old on cosc2.old_state_id = cos2_old.customer_order_state_id 
        WHERE cos1_new.name = "state1" AND  cos2_new.name = "state2" and cosc2.change_date < "2008-11-06 09:00" 
AND cosc2.change_date > "2008-11-06 06:00" GROUP BY cosc1.change_date, cosc2.change_date ;

Consulta devuelve el tiempo en segundos entre los cambios de estado de un pedido de un cliente.

El estado de nombres y fechas que se insertan de forma dinámica en la consulta.

Editar:
Intentado este

"SELECT (UNIX_TIMESTAMP(cosc1.changeDate) - UNIX_TIMESTAMP(cosc2.changeDate))" + 
        " FROM" + 
        " " + CustomerOrderStateChange.class.getName() + " as cosc1" +
        " INNER JOIN " + CustomerOrderStateChange.class.getName() +  " as cosc2" +
        " WHERE cosc1.newState.name = ?" +
        " AND cosc1.order.id = cosc2.order.id" + 
        " AND cosc2.newState.name = ?" +
        " AND cosc2.changeDate < ?" +
        " AND cosc2.changeDate > ?" + 
        " GROUP BY cosc1.changeDate, cosc2.changeDate";

y recibió excepción»exterior o completo ingresar debe ser seguido por la expresión de ruta de acceso«

InformationsquelleAutor Feet | 2008-11-05

2 Comentarios

  1. 6

    Normalmente HQL une se especifican usando la propiedad en el objeto, por ejemplo, si la clase Foo y Bar y Foo.la barra es de tipo Barra, luego from Foo f inner join f.bar as b es la combinación. Que yo sepa, no hay manera de realizar una auto-join en HQL (podría estar equivocado).

    Que dijo, Hibernate permite escribir (ligeramente mejorada) consultas SQL con session.createSQLQuery(...).

    • Puedes dar un link o algo para el «ligeramente mejorada de la» sintaxis de apoyo para las consultas SQL?
  2. 0

    Terminó cambiando el uso de SQL nativo y un PreparedStatement como parece que Hibernan en la sesión.createSQLQuery() solo funciona para las Entidades Administradas.

Dejar respuesta

Please enter your comment!
Please enter your name here