2011-12-18 12 views
5

क्या जेपीए क्वेरी में उप-क्वेरी पर LIMIT लगाया जा सकता है?जेपीए क्वेरी की उप-क्वेरी पर LIMIT कैसे लगाया जाए?

मैं शुद्ध एसक्यूएल

select * from ipinfo 
where RangeEnd < (select RangeStart from ipinfo where RangeStart >= 1537022421 order by RangeStart asc limit 1) and (1537022421 <= RangeEnd) 
ORDER BY RangeEnd desc 
limit 1 

में क्वेरी निम्नलिखित है यह सीधे परिवर्तित JPQL के लिए जब से मैं JPQL में सीमा का उपयोग नहीं कर सकते हैं मैं होगा मैं तरह

select obj from IpInfo obj 
where obj.rangeEnd < (select obj2.rangeStart from IpInfo obj2 where obj2.rangeStart >= ?1 order by obj2.rangeStart asc limit 1) and (?1 <= obj.rangeEnd) 
ORDER BY obj.rangeEnd desc 
limit 1 

कुछ होगा उस पर setMaxResults(1) का उपयोग करें। लेकिन उप-क्वेरी के बारे में क्या?

अद्यतन:

मैं अब के लिए @NamedNativeQuery साथ जाने का फैसला किया, लेकिन यह डीबी विशिष्ट कोड है। यदि आप शुद्ध जेपीए समाधान का सुझाव दे सकते हैं तो मैं वास्तव में इसकी सराहना करूंगा।

उत्तर

2

मुझे नहीं पता कि जेपीक्यूएल के साथ ऐसा कैसे करें लेकिन आप शायद इसे मानदंड एपीआई के साथ संभाल सकते हैं, कम से कम मुझे यकीन है कि हम इसे हाइबरनेट मानदंड सबक्वायरीज़ के साथ कर सकते हैं, इसलिए मुझे लगता है कि यह जेपीए के साथ भी संभव है यदि जेपीए मानदंड एपीआई मुझे थोड़ा उलझन में दिखाई देता है।

चेक करें: JPA 2.0, Criteria API, Subqueries, In Expressions

वैसे भी तुम भी अपने सबक्वेरी पर एक सीमा की जरूरत नहीं है।

आपका मूल प्रश्न: ipinfo RangeStart> = १५३७०२२४२१ आदेश RangeStart एएससी सीमा 1 से ऐसा लगता है, जहां आप अपनी ipinfo सूची, जो सिर्फ एक दिया मूल्य से ऊपर है की न्यूनतम RangeStart चाहते से RangeStart चयन । इसके लिए न्यूनतम कार्य किया गया है।

आप बस इस तरह एक सबक्वेरी इस्तेमाल कर सकते हैं:

select min(RangeStart) from ipinfo where RangeStart >= 1537022421 

भले ही आप ipinfo अपने सबक्वेरी पर लौट आए अन्य की जरूरत है ऐसा ही कुछ के साथ किया जा सकता है:

select RangeEnd, anything,blabla from ipinfo where RangeStart = (
    select min(RangeStart) from ipinfo where RangeStart >= 1537022421 
) 
+0

नरक हाँ! मैंने 'मिनट 'के बारे में नहीं सोचा था। आपका बहुत बहुत धन्यवाद! – expert

+1

यह अच्छा और सब कुछ है, लेकिन मुझे वास्तव में मूल प्रश्न का उत्तर चाहिए .. – Amalgovinus

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