Puede HQL Seleccionar en el conjunto de resultados de otra consulta?

Por ejemplo:

SELECT COUNT(*) FROM (SELECT * FROM Table)

Puedo hacerlo en SQL, pero cuando he intentado como anteriormente en HQL pero el solo me muestre error de sintaxis «testigo inesperado: ( cerca de la línea 1, columna 22 …»

  • Tengo el mismo problema,por Favor sugerir la solución exacta que usted utiliza
InformationsquelleAutor Red Bit | 2013-04-03

3 Comentarios

  1. 15

    HQL admite subconsultas, sin embargo, que sólo puede ocurrir en la selección o la cláusula where. El ejemplo que proporcionan mejor se escribió como una escalera de instrucción en HQL. Por ejemplo:

    select count(*) from table t  (where table is the entity name)

    Si la consulta requiere un proceso más complejo, declaración de (select * from Table), yo recomiendo poner esta lógica en una vista y, a continuación, crear una entidad con sede fuera de este punto de vista.

    Para bases de datos que soportan subselecciones, Hibernate soporta subconsultas
    dentro de las consultas. Una subconsulta debe ser rodeados por paréntesis (a menudo por
    una de agregado de SQL llamada a la función). Incluso subconsultas correlacionadas
    (subconsultas que se refieren a un alias en la consulta externa) están permitidos.

    Ejemplo

    from DomesticCat as cat
    where cat.name not in (
        select name.nickName from Name as name
    )
    • Hay un Criterio equivalente?
  2. 0

    El uso de una subconsulta como te deseo no es posible. Una forma es usar un distintivo de esta manera:

    SELECT COUNT(DISTINCT t.id) FROM table t INNER JOIN t.list l
         WHERE t.status = 'ST1' AND l.status = 'ST2'"

    He utilizado el inner join para expresar un selecto repetición

  3. 0

    no hay manera de hacer subconsulta en from cláusula en HQL incluso si la base de datos de soporte de ti, he resuelto este problema al poner la consulta en sql como un store procedure, a continuación, llamar el procedimiento en HQL. Por ejemplo:

    Insertar el procedimiento en sql:

    DELIMITER $$
    CREATE PROCEDURE `procedure_name`(
      `arg_name` INT,
    ) BEGIN
         your query here
    END;
    $$
    DELIMITER ;

    Entonces, si utiliza hibernate, llamar a este procedimiento desde el código java de la siguiente manera:

    Query query = session.createSQLQuery("CALL procedure_name(:arg_name)");
    query.setParameter("arg_name", args);
    List list = query.list();

    Espero que esto te puede ayudar.

Dejar respuesta

Please enter your comment!
Please enter your name here