Estoy tratando de crear una Unión entre dos tablas, utilizando HQL (Hibernate Query Language). Esta secuencia de comandos SQL funciona bien en mi servidor SQL server:

SELECT COUNT(DISTINCT linkedin_id) as test, school_name
FROM
(SELECT * FROM alum_education 
 UNION
 SELECT * FROM alum_connection_educations) AS UNIONS where school_name='some string'

el problema es que cuando intento ejecutar en grails como este:

     def countOfEdu = AlumEducation.executeQuery("select count (distinct linkedinId ) as countOfEdu, schoolName as SchoolName from (SELECT * FROM alumEducation UNION SELECT * FROM alumConnectionEducations) AS UNIONS where schoolName='some string'" )

me sale este error:

  org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 83 [select count(distinct linkedinId )  as countOfEdu, schoolName as SchoolName  from (SELECT * FROM alumEducation UNION SELECT * FROM alumConnectionEducations) AS UNIONS where schoolName='Duquesne University']

¿Cómo puedo ejecute la instrucción SQL en grails?

gracias
jason

Posibles duplicados: stackoverflow.com/questions/201023/hibernate-union-alternatives
eliminado el comentario

OriginalEl autor jason | 2011-08-24

3 Comentarios

  1. 37

    Sindicatos no son compatibles con HQL. Hay un problema en modo de Hibernación de la JIRA que está abierto desde el año 2005.

    Pero es duplicado por el «HHH-3971 por medio de la UNIÓN de TODOS , la INTERSECCIÓN de la funcionalidad en modo de hibernación«, y que fue cerrado

    OriginalEl autor Andrey Adamovich

  2. 1

    Me gustaría compartir una manera que he encontrado para evitar esta situación. La única regla aquí es tener el mismo tipo, en este caso una Cadena, correspondiente al tipo de la devolución de la lista, usted puede añadir tantas tablas como desee:

    public List<String> findByCPForCNPJ(String query){
    TypedQuery<String> ccpf = manager.createQuery("select cpf from PessoaFisica where cpf like :pCpf", String.class);
    ccpf.setParameter("pCpf", "%" + query + "%");
    List<String> lista1 = ccpf.getResultList();
    
    TypedQuery<String> ccnpj = manager.createQuery("select cnpj from PessoaJuridica where cnpj like :pCnpj", String.class);
    ccnpj.setParameter("pCnpj", "%" + query + "%");
    
    lista1.addAll(ccnpj.getResultList());
    return lista1;
    }

    He utilizado un método en JAVA para esta solución.
    Espero haber contribuido un poco, suerte a todos…

    OriginalEl autor user3632200

  3. 0

    En su caso, el verdadero problema es que las subconsultas no son compatibles en la cláusula FROM en EJBQL.

    OriginalEl autor Babou

Dejar respuesta

Please enter your comment!
Please enter your name here