2011-08-24 11 views
10

मैं एचक्यूएल (हाइबरनेट क्वेरी भाषा) का उपयोग करके दो तालिकाओं के बीच एक संघ बनाने की कोशिश कर रहा हूं।एचक्यूएल में यूनियन एसक्यूएल स्टेटमेंट कैसे करें?

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 में इसे चलाने के लिए प्रयास करें:: यह SQL स्क्रिप्ट मेरे एसक्यूएल सर्वर पर ठीक काम करता है

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

मैं इस त्रुटि मिलती है

मैं उपरोक्त SQL कथन को grails में कैसे चला सकता हूं?

धन्यवाद जेसन

+3

संभावित डुप्लिकेट: http://stackoverflow.com/questions/201023/hibernate-union-alternatives –

+0

टिप्पणी – jellobird

उत्तर

37

यूनियन HQL द्वारा समर्थित नहीं हैं। Hibernate के JIRA में issue है जो 2005 के बाद से खुला है।

+0

नष्ट कर दिया लेकिन द्वारा "दोहराया गया है ** [एचएचएच -3971] (https://hibernate.atlassian.net/browse/HHH-3971) यूनियन का उपयोग करके, हाइबरनेट में इंटरसेक्शन कार्यक्षमता ** ", और यह बंद था –

0

आपके मामले में, असली समस्या यह है कि सबक्वायरी EJBQL में FROM खंड में समर्थित नहीं हैं।

0

मैं इस स्थिति से बचने के लिए एक रास्ता साझा करना चाहता हूं। यहाँ केवल नियम के रूप में आप चाहते हैं, आप के रूप में कई टेबल जोड़ सकता है, एक ही प्रकार, इस मामले में एक स्ट्रिंग है वापसी सूची के प्रकार के लिए इसी:

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

मैं के लिए जावा में एक विधि का इस्तेमाल किया यह समाधान मुझे आशा है कि मैं थोड़ा, सभी के लिए सौभाग्य योगदान दिया है ...