Estoy ejecutando el siguiente HQL y se está ejecutando correctamente

String hql = "FROM Employee";
Query query = session.createQuery(hql);
List results = query.list();

Ahora también quiero iniciar el sql generado en el backend en los registros para apoyar a los usuarios , quiero hacer uso de QueryTranslator indique cómo puedo generar el sql para la correspondiente HQL por favor avisar de cómo lograr esto.

OriginalEl autor | 2013-08-22

4 Comentarios

  1. 6

    Usted puede usar el modo de hibernación QueryTranslator:

    String hqlQueryString = hqlQuery.getQueryString();
    ASTQueryTranslatorFactory queryTranslatorFactory = new ASTQueryTranslatorFactory();
    SessionImplementor hibernateSession = entityManager.unwrap(SessionImplementor.class);
    QueryTranslator queryTranslator = queryTranslatorFactory.createQueryTranslator("", hqlQueryString, java.util.Collections.EMPTY_MAP, hibernateSession.getFactory());
    queryTranslator.compile(java.util.Collections.EMPTY_MAP, false);
    String sqlQueryString = queryTranslator.getSQLString();
    Por desgracia esto no es trabajo para Hibernar 5 🙁 No es nueva 5º parámetro EntityGraphQueryHint.
    usted puede pasar null como el 5º parámetro. Se debe trabajar.
    Esto sólo devuelve el hql no en la de sql; la pregunta era: «Ahora yo también quiero iniciar el sql generado en el backend en los registros para apoyar a los usuarios «
    El código finalmente regresa SQL equivalencia de hqlQuery en «sqlQueryString» de la variable.
    Por desgracia, los alias de las columnas no utilizadas.

    OriginalEl autor Abolfazl Hashemi

  2. 3

    Creo que usted desee una combinación de la parte superior 2 respuestas

      String hqlQueryString = query.unwrap(org.hibernate.Query.class).getQueryString();
      ASTQueryTranslatorFactory queryTranslatorFactory = new ASTQueryTranslatorFactory();
      SessionImplementor hibernateSession = em.unwrap(SessionImplementor.class);
      QueryTranslator queryTranslator = queryTranslatorFactory.createQueryTranslator("", hqlQueryString, java.util.Collections.EMPTY_MAP, hibernateSession.getFactory());
      queryTranslator.compile(java.util.Collections.EMPTY_MAP, false);
      String sqlQueryString = queryTranslator.getSQLString();
    createQueryTranslator requiere un parámetro más: EntityGraphQueryHint.

    OriginalEl autor CPrescott

  3. 1

    usted puede conseguir que la Consulta mediante el uso de la manta método.

    String queryString = query.unwrap(org.hibernate.Query.class).getQueryString();
    ¿qué versión de hibernate tiene una consulta con una manta método?
    parte de java6 de la api de persistencia docs.oracle.com/javaee/6/api/javax/persistence/Query.html
    Esto sólo funciona para obtener la consulta HQL y no la consulta SQL

    OriginalEl autor Ashish Thukral

  4. 0

    Encontré la siguiente solución en la web:

    QueryTranslatorFactory translatorFactory = new ASTQueryTranslatorFactory();
    SessionFactoryImplementor factory = (SessionFactoryImplementor) getSessionFactory();
    QueryTranslator translator = translatorFactory.
            createQueryTranslator(hqlQueryText, hqlQueryText, Collections.EMPTY_MAP, factory);
    translator.compile(Collections.EMPTY_MAP, false);
    translator.getSQLString(); 

    Fuente: http://narcanti.keyboardsamurais.de/hibernate-hql-to-sql-translation.html

    OriginalEl autor Alexander

Dejar respuesta

Please enter your comment!
Please enter your name here