2011-08-24 25 views
10

HQL (Hazırda Bekletme Dili) kullanarak iki tablo arasında bir Birleşim oluşturmaya çalışıyorum.HQL'de bir Union SQL deyimi nasıl yapılır?

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

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

ben bu hatayı alıyorum: ben böyle grails onu çalıştırmayı denediğinizde

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' 

sorun şudur: Bu SQL komut benim SQL sunucusu üzerinde çalışıyor

Yukarıdaki SQL deyimini grails'te nasıl çalıştırabilirim?

sayesinde jason

+3

Olası yinelenen: http://stackoverflow.com/questions/201023/hibernate-union-alternatives –

+0

yorumunu – jellobird

cevap

37

Sendikalar HQL tarafından desteklenmemektedir. Hibernate'in JIRA'sında 2005'ten beri açık olan bir issue var.

+0

silindi Ama "tarafından yineleniyor ** [HHH-3971] (https://hibernate.atlassian.net/browse/HHH-3971) UNDER TÜM, INTERSECTION işlevselliğini hibernate ** "kullanarak, ve kapatıldı –

0

Durumunuzda, asıl sorun, alt sorguların EJBQL'de FROM deyiminde desteklenmemesidir.

0

Bu durumu önlemek için bulduğum bir yolu paylaşmak isterim. Burada tek kural istediğiniz kadar istediğiniz sayıda tablo ekleyebilirsiniz dönüş listenin türüne karşılık gelen bu durumda, bir String aynı tür sahip olmaktır: Ben için JAVA bir yöntem kullanıldı

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

bu çözüm. Ben biraz, herkese iyi şanslar katkıda bulunmuş umut ...