2015-03-13 7 views
9

के लिए डिफ़ॉल्ट सॉर्ट ऑर्डर बदलें मैं स्प्रिंग डेटा जेपीए का उपयोग कर रहा हूं और मुझे आश्चर्य है कि स्प्रिंग डेटा findAll() विधि द्वारा उपयोग की जा रही इकाई के लिए डिफ़ॉल्ट सॉर्ट ऑर्डर बदलना संभव है? एक ही प्राप्त करने के लिए एक और तरीका हैस्प्रिंग डेटा findAll() विधि

dao.findAll(new Sort(Sort.Direction.DESC, "<colName>")); 

:

+0

लिखें आपको लगता है कि के लिए जेपीए क्वेरी के मालिक हैं। –

+0

@Andrei हाँ, लेकिन यदि संभव हो तो मैं इससे बचना चाहूंगा। –

+0

findAll में कोई ऑर्डरिंग लागू नहीं है। यदि आप इसे बदलना चाहते हैं तो आपको 'SimpleJpaRepository' का विस्तार करना होगा और' findAll' विधि को ओवरराइड करना होगा। [सभी भंडारों में कस्टम व्यवहार जोड़ना] पर अनुभाग देखें (http://docs.spring.io/spring-data/jpa/docs/1.7.2.RELEASE/reference/html/#repositories.custom-behaviour-for- सभी खजाने)। आप इसे डिफ़ॉल्ट व्यवहार पर ओवरराइड करने के लिए भी उपयोग कर सकते हैं। –

उत्तर

2

आप या तो द्वारा ऐसा करने के लिए सक्षम होना चाहिए:: नीचे दी गई विधि नाम का प्रयोग करें,

वसंत-डेटा 1.5+ में

अपने इंटरफेस में findAll() विधि अधिभावी, @query एनोटेशन जोड़ने और नीचे अपनी इकाई वर्ग की तरह में एक नामित क्वेरी बनाने, उदाहरण के लिए,:

इकाई

@Entity 
@NamedQuery(name = "User.findAll", query="select u from User u order by u.address.town") 
public class User{ 

} 

भंडार

public interface UserRepository extends ... <User, Long> { 

    @Override 
    @Query 
    public Iterable<User> findAll(); 
} 

या,

एक कस्टम भंडार कार्यान्वयन बनाने के द्वारा:

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-implementations

19

आप इस इस प्रकार प्राप्त कर सकते हैं।

findByOrderByIdAsc() 
+0

हां यह एक विकल्प होगा। हालांकि मैं एक विशिष्ट आदेश का उपयोग करने के लिए मानक findAll() विधि चाहता हूं। कारण यह है कि मैं इसे @Cacheable भी उपयोग कर रहा हूं। –

+0

क्या आप इस विधि का नाम आजमा सकते हैं - 'findByOrderByIdAsc()' – Mithun

+0

हाँ मैं समझता हूं कि मैं इसका उपयोग कर सकता हूं। लेकिन मुझे आश्चर्य है कि सामान्य रूप से इकाई के लिए डिफ़ॉल्ट सॉर्टिंग सेट करना संभव है। मुझे नहीं लगता। –

0

एक PagingAndSortingRepository बजाय का उपयोग करें। इसी के साथ जगह में आप एक queryparameter जोड़ सकते हैं प्रकार =,

भंडार:

public interface UserRepository extends PagingAndSortingRepository<User, Long> { 
    //no custom code needed 
} 

प्राप्त अनुरोध:

localhost:8080/users?sort=name,desc 
संबंधित मुद्दे