Как сделать оператор Union SQL в HQL?

Я пытаюсь создать союз между двумя таблицами, используя HQL (Hibernate Query Language). Этот сценарий SQL прекрасно работает на моем сервере SQL:

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'

проблема заключается в том, когда я пытаюсь запустить его в Grails, как это:

     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'" )

я получаю эту ошибку:

  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']

Как я могу запустить вышеупомянутый оператор SQL в Grails?

спасибо Джейсон

5 ответов

Решение

Союзы не поддерживаются HQL. Существует проблема в JIRA Hibernate, которая открыта с 2005 года.

Я хотел бы поделиться тем, как я нашел способ избежать этой ситуации. Единственное правило здесь - иметь тот же тип, в этом случае String, соответствующий типу возвращаемого списка, вы можете добавить столько таблиц, сколько захотите:

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

Я использовал метод в JAVA для этого решения. Я надеюсь, что я внес свой вклад, удачи всем...

Поддержка операций над множествами (UNION, INTERSECT, EXCEPT) была добавлена ​​в Hibernate 6.0.

См. выпуск , связанный с Андреем Адамовичем

Вы всегда можете использовать собственный запрос для получения набора результатов.

В вашем случае реальная проблема заключается в том, что подзапросы не поддерживаются в предложении FROM в EJBQL.

Другие вопросы по тегам