Soy un parcial programador de interfaz de usuario, ahora tengo que activar en modo de Hibernación en el desarrollo. Hoy se me ocurrió un problema en HQL cuando estoy tratando de utilizar la UNIÓN de TODOS, aquí está el HQL:

SELECT COUNT(DISTINCT users.userId) AS totalSize FROM (SELECT DISTINCT 
d1.sponsor.id AS userId FROM Dating d1 WHERE d1.invitee.id = ? UNION ALL 
SELECT DISTINCT d2.invitee.id AS userId FROM Dating d2 WHERE d2.sponsor.id = ?) 
AS users 

Se muestra un error como este:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 55

Y luego he intentado traducir de esta HQL a raw SQL:

SELECT COUNT(DISTINCT users.userId) AS totalSize FROM (SELECT DISTINCT 
d1.sponsorId AS userId FROM mmy_dating d1 WHERE d1.inviteeId = 6 UNION 
ALL SELECT DISTINCT d2.inviteeId AS userId FROM mmy_dating d2 WHERE 
d2.sponsorId = 6) AS users;

Que normalmente muestra el resultado correcto, así que tengo que pensar si Hibernate no admite la sintaxis de UNION ALL?

Gracias de antemano.

InformationsquelleAutor Brady Zhu | 2013-08-18

2 Comentarios

  1. 0

    gustaría compartir, que en mi caso, me encontré con una situación que bordea esta situación.
    La única regla aquí es tener el mismo tipo, en este caso de la Cadena, correspondiente a devolver la lista, puede agregar la cantidad de tablas que desea:

    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;
    }

    Espero haber contribuido un poco, suerte a todos…

    • haa se utiliza un método en JAVA para esta solución…

Dejar respuesta

Please enter your comment!
Please enter your name here