2015-10-15 6 views
11

यहां मेरी समस्या का एक सरल उदाहरण है। मेरे पास यह भंडार और इकाई वर्ग है।आप एक स्प्रिंग जेपीए रिपॉजिटरी को कैसे खोजते हैं जिसमें एक कीवर्ड का उपयोग करके क्वेरी है?

public interface ThingRepository extends JpaRepository<ThingEntity, Long> { 
    ThingEntity findByFooInAndBar(String fooIn, String bar); 
} 

@Entity 
public class ThingEntity { 
    @Column(name="FOO_IN", nullable=false, length=1) 
    private String fooIn; 

    public String getFooIn() { 
     return fooIn; 
    } 

    public setFooIn(String fooIn) { 
     this.fooIn = fooIn; 
    } 

    /* not including bar property for brevity's sake */ 
} 

वसंत निम्नलिखित अपवाद फेंक रहा है।

org.springframework.data.mapping.PropertyReferenceException: No property foo found for type ThingEntity! 

ऐसा लगता है कि वसंत की तरह विधि findByFooInAndBar लेने और सोचता है कि foo मेरी संपत्ति नाम है और in एक संग्रह के भीतर मूल्यों से मेल खाते के लिए कोई कीवर्ड है।

मैं यह समझने के लिए कैसे प्राप्त करूं कि संपत्ति का नाम fooIn है, foo नहीं?

+0

मुझे नहीं लगता कि इस व्यवहार अपनी खुद की विधि लेखन के अलावा अन्य को बायपास करने के लिए एक रास्ता है है। या सिर्फ अपरकेस के बिना फ़ील्ड को 'fooin'' का नाम दें? –

उत्तर

6

इस समस्या को दूर करने के लिए, मैंने @Query एनोटेशन का उपयोग करके मैन्युअल रूप से क्वेरी को परिभाषित किया है। अगर किसी ऐसे समाधान को ढूंढें जो मैन्युअल क्वेरी की आवश्यकता नहीं है तो मैं खुशी से किसी और के जवाब को स्वीकार करूंगा।

public interface ThingRepository extends JpaRepository<ThingEntity, Long> { 

    @Query("SELECT t FROM Thing t WHERE t.fooIn = ?1 AND t.bar = ?2") 
    ThingEntity findByFooInAndBar(String fooIn, String bar); 
} 
1

स्प्रिंग क्वेरी आपकी क्वेरी आप fooin या ऐसा ही कुछ करने के लिए चर fooIn का नाम बदलना चाहिए बनाने के लिए लिंक की जांच बनाने के लिए अपने विधि में पार्स करने है 'में' ....

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