2010-04-30 13 views
6

में उप-चयन के साथ एसक्यूएल को कनवर्ट करना मेरे पास निम्न SQL है जिसमें मुझे HQL में कनवर्ट करने में समस्याएं आ रही हैं। एक एनपीई फेंक दिया जा रहा है - जो मुझे लगता है कि एसयूएम समारोह के साथ कुछ करना है। इसके अलावा, मैं उप-उपनाम उपनाम को सॉर्ट करना चाहता हूं - क्या यह संभव है?एचक्यूएल

एसक्यूएल (सबसिलेक्ट):

SELECT q.title, q.author_id, 
    (SELECT IFNULL(SUM(IF(vote_up=true,1,-1)), 0) 
    FROM vote WHERE question_id = q.id) AS votecount 
FROM question q ORDER BY votecount DESC 

HQL (काम नहीं कर रहा) अगर कोई रुचि रखता है

SELECT q, 
    (SELECT COALESCE(SUM(IF(v.voteUp=true,1,-1)), 0) 
    FROM Vote v WHERE v.question = q) AS votecount 
    FROM Question AS q 
    LEFT JOIN q.author u 
    LEFT JOIN u.blockedUsers ub 
    WHERE q.dateCreated BETWEEN :week AND :now 
    AND u.id NOT IN (
     SELECT ub.blocked FROM UserBlock AS ub WHERE ub.blocker = :loggedInUser 
    ) 
    AND (u.blockedUsers IS EMPTY OR ub.blocked != :loggedInUser) 
    ORDER BY votecount DESC 
+1

सिर्फ जिज्ञासा के लिए: आप इस जटिल और जटिल एचक्यूएल क्वेरी में संक्षिप्त एसक्यूएल क्वेरी का अनुवाद क्यों करना चाहते हैं? – bertolami

+0

क्या आप इस http://stackoverflow.com/questions/23303315/hql-query-sum-of-two-sub- चयन के साथ मेरी मदद कर सकते हैं –

उत्तर

10

यहाँ काम कर HQL है:

SELECT q, 
(SELECT COALESCE(SUM(CASE v.voteUp WHEN true THEN 1 ELSE -1 END), 0) 
FROM Vote v WHERE v.question = q) AS votecount 
FROM Question AS q 
LEFT JOIN q.author u 
LEFT JOIN u.blockedUsers ub 
WHERE q.dateCreated BETWEEN :week AND :now 
AND u.id NOT IN (
    SELECT ub.blocked FROM UserBlock AS ub WHERE ub.blocker =:loggedInUser 
) 
AND (u.blockedUsers IS EMPTY OR ub.blocked !=:loggedInUser) 
ORDER BY col_1_0_ DESC 

सूचना col_1_0_ द्वारा आदेश

हाइबरनेट के साथ एक खुला मुद्दा है - यह उपनामों को सही ढंग से पार्स नहीं करता है और चूंकि उपनामों का नाम बदलकर बदल दिया जाता है, इसलिए एक त्रुटि फेंक दी जाएगी। इसलिए, col_1_0_ मूल रूप से एक वर्कअराउंड है - यह नाम हाइबरनेट उत्पन्न करता है। समस्या देखें: http://opensource.atlassian.com/projects/hibernate/browse/HHH-892

संबंधित मुद्दे