2017-02-16 13 views
6

मेरे पास स्प्रिंग बूट 1.5.1 और स्प्रिंग डेटा रेस्ट का उपयोग कर डेटाबेस डेटाबेस है। मैं अपनी इकाइयों को एक MySQL डेटाबेस में संग्रहीत कर रहा हूं, और स्प्रिंग के पेजिंग एंड सोर्सिंग रिपोजिटरी का उपयोग करके उन्हें आरईएसटी पर एक्सेस कर रहा हूं। मुझे this मिला जो बताता है कि नेस्टेड पैरामीटर द्वारा सॉर्टिंग समर्थित है, लेकिन मुझे नेस्टेड फ़ील्ड द्वारा क्रमबद्ध करने का कोई तरीका नहीं मिल रहा है।स्प्रिंग डेटा रेस्ट - नेस्टेड प्रॉपर्टी द्वारा क्रमबद्ध करें

मैं इन कक्षाओं में है:

@Entity(name = "Person") 
@Table(name = "PERSON") 
public class Person { 
    @ManyToOne 
    protected Address address; 

    @ManyToOne(targetEntity = Name.class, cascade = { 
     CascadeType.ALL 
    }) 
    @JoinColumn(name = "NAME_PERSON_ID") 
    protected Name name; 

    @Id 
    protected Long id; 

    // Setter, getters, etc. 
} 

@Entity(name = "Name") 
@Table(name = "NAME") 
public class Name{ 

    protected String firstName; 

    protected String lastName; 

    @Id 
    protected Long id; 

    // Setter, getters, etc. 
} 

उदाहरण के लिए, जब विधि का उपयोग कर:

Page<Person> findByAddress_Id(@Param("id") String id, Pageable pageable); 

और यूआरआई http://localhost:8080/people/search/findByAddress_Id?id=1&sort=name_lastName,desc बुला, प्रकार पैरामीटर पूरी तरह से वसंत द्वारा नजरअंदाज कर दिया जाता है।

मापदंडों प्रकार = name.lastName और प्रकार = nameLastName या तो काम नहीं किया।

क्या मैं बाकी अनुरोध गलत कर रहा हूं, या कुछ कॉन्फ़िगरेशन खो रहा हूं?

धन्यवाद!

+2

name.lastName उपयोग करने की संपत्ति होगी। नेस्टेड गुणों द्वारा ऑर्डर करना हूपर रिलीज में मेरे लिए ठीक काम करता है लेकिन मुझे इंगल्स रिलीज के आरसी संस्करण में निम्नलिखित बग का अनुभव हुआ। यह तय किया जा रहा है हालांकि मैंने कोशिश नहीं की है। https://jira.spring.io/browse/DATAREST-976?jql=text%20~%20%22sort%20nested%22%20ORDER%20BY%20created%20DESC –

+0

@AlanHay आप 'मैन' हैं, साथ काम कर रहे हैं मुझे हूपर रिलीज ' 1.10.10.RELEASE 2.5.10.RELEASE ' –

+0

@AlanHay बीटीडब्ल्यू, मैंने कोशिश की [' v3.0.0.M3'] (http://docs.spring.io/spring-data/rest/docs/3.0.0। एम 3/changelog.txt) ने बताया कि तय है लेकिन मेरे साथ काम नहीं कर रहा है। –

उत्तर

1

मैंने इसके माध्यम से डीबग किया और ऐसा लगता है कि एलन ने उल्लेख किया था।

खुद नियंत्रक बनाएं, अपने रेपो और वैकल्पिक रूप से प्रक्षेपण कारखाने (यदि आप अनुमानों की जरूरत है) इंजेक्षन:

मैं वैकल्पिक हल मदद कर सकता है पाया। अपने भंडार

@RestController 
@RequestMapping("/people") 
public class PeopleController { 

    @Autowired 
    PersonRepository repository; 

    //@Autowired 
    //PagedResourcesAssembler<MyDTO> resourceAssembler; 

    @GetMapping("/by-address/{addressId}") 
    public Page<Person> getByAddress(@PathVariable("addressId") Long addressId, Pageable page) { 

     // spring doesn't spoil your sort here ... 
     Page<Person> page = repository.findByAddress_Id(addressId, page) 

     // optionally, apply projection 
     // to return DTO/specifically loaded Entity objects ... 
     // return type would be then PagedResources<Resource<MyDTO>> 
     // return resourceAssembler.toResource(page.map(...)) 

     return page; 
    } 

} 

पर यह कॉल करने के लिए विधि प्राप्त करें विधि यह 2.6.8.RELEASE के साथ मेरे लिए काम करता है; यह मुद्दा सभी संस्करणों में प्रतीत होता है।

+0

यह समाधान काम किया। धन्यवाद। –

0

मुझे जो कामकाज मिला वह केवल अतिरिक्त उद्देश्यों को हल करने के लिए एक अतिरिक्त पढ़ने-योग्य संपत्ति बनाना है। ऊपर के उदाहरण पर निर्माण:

@Entity(name = "Person") 
@Table(name = "PERSON") 
public class Person { 

    // read only, for sorting purposes only 
    // @JsonIgnore // we can hide it from the clients, if needed 
    @RestResource(exported=false) // read only so we can map 2 fields to the same database column 
    @ManyToOne 
    @JoinColumn(name = "address_id", insertable = false, updatable = false) 
    private Address address; 

    // We still want the linkable association created to work as before so we manually override the relation and path 
    @RestResource(exported=true, rel="address", path="address") 
    @ManyToOne 
    private Address addressLink; 

    ... 
} 

प्रस्तावित वैकल्पिक हल के लिए दोष यह अब हम स्पष्ट रूप से सभी गुण जिसके लिए हम नेस्टेड छंटाई का समर्थन करना चाहते नकल करना है।

लेटर संपादित करें: एक और दोष यह है कि हम ग्राहकों से एम्बेडेड संपत्ति को छिपा नहीं सकते हैं। मेरे मूल जवाब में, मैं सुझाव दे रहा था कि हम @ जेसन इग्नोर जोड़ सकते हैं, लेकिन स्पष्ट रूप से इस तरह टूट जाता है।

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