मेरे पास दो इकाइयां, कंपनी और जॉब है, जिसमें एक वन्यमी बिडरेक्शनल रिलेशनशिप है। मेरी समस्या यह है कि मैं कंपनी के List<Job> jobs
को आलसी लोड नहीं कर सकता।स्प्रिंग डेटा रेस्ट जेपीए - आलसी लोड नहीं कर सकता OneToMany बिडरेक्शनल रिलेशनशिप
उदाहरण के लिए जब मैं कार्य करें:
/api/companies/1
प्राप्त इस JSON प्रतिक्रिया है:
{
"id": 1,
"name": "foo",
...
"_embedded": {
"jobs": [
{...},
...
{...}
],
"employees": [
{...},
{...}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/api/companies/1"
},
"jobs": {
"href": "http://localhost:8080/api/companies/1/jobs"
},
"employees": {
"href": "http://localhost:8080/api/companies/1/employees"
}
}
}
मैं _embedded
के बाद से मैं सेट नहीं किया FetchType = उत्सुक है करने के लिए नहीं करना चाहती।
Company.java
@Entity
public class Company {
@Column(nullable = false, unique = true)
private String name;
@OneToMany(mappedBy = "company", fetch = FetchType.LAZY)
private List<Job> jobs;
...
public Company() {
}
...
}
Job.java
@Entity
public class Job {
@Column(nullable = false)
public String title;
@Column(length = 10000)
public String description;
@ManyToOne(fetch=FetchType.LAZY)
private Company company;
...
public Job() {
}
...
}
आप देख सकते हैं एक ही बात अन्य OneToMany रिश्तों (कर्मचारियों) के लिए होता है: यहाँ मेरी मॉडल हैं। क्या मैं हर बार जॉब ओपनिंग या कर्मचारियों की पूरी सूची लौटने से बच सकता हूं?
संपादित करें: नौकरी की ओर से आलसी भार ठीक काम करता है! मुझे उस नौकरी से संबंधित कंपनी की प्रतिक्रिया में नहीं मिलता है। कंपनी को प्राप्त करने के लिए मुझे स्पष्ट रूप से /api/jobs/123/company
करना होगा।
EDIT2: अनुमान केवल संग्रह के लिए काम करते हैं। इस मामले में यह मेरी जरूरत नहीं है। अंश काम कर सकते थे, लेकिन मैं उनसे बचना चाहता हूं। मैं /api/companies/1?projection=MyProjection
की व्याख्या नहीं करना चाहता क्योंकि मैं एक से अधिक का उपयोग नहीं करूंगा। मैं डिफ़ॉल्ट व्यवहार को बदलना चाहता हूं, जैसे संकलन संग्रह में करते हैं।
EDIT3: मैं इस
@RestResource(exported = false)
@OneToMany(mappedBy = "company")
private List<Job> jobs;
की कोशिश की और मैं त्रुटि Detected multiple association links with same relation type! Disambiguate association
मिलता है।
यह वास्तव में कष्टप्रद है। मुझे बस _embedded
से छुटकारा पाना होगा। कुछ भी?
यह वास्तव में जेपीए के बारे में कोई सवाल नहीं है, यह सवाल है कि 'कंपनी' के भीतर संग्रह को क्रमबद्ध किया जाना चाहिए या नहीं। यह वही समस्या होगी यदि रिश्ते सिर्फ पीओजेओ को लगातार वस्तुओं पर मैप नहीं किया गया था। – wrschneider
इस मामले में 'जॉब्स' फ़ील्ड पर '@RestResource (exported = false)' या '@ JsonIgnore' पर्याप्त होना चाहिए (देखें [यहां] (http://docs.spring.io/spring-data/rest/docs /current/reference/html/#customizing-sdr.hiding-repositories))। –
@ डेविड रिकिकिटेलि लेकिन मुझे उन्हें निर्यात करने की आवश्यकता है। मुझे बस उन्हें आलसी लोड करने की ज़रूरत है, इसलिए जब मैं '/ api/Companies/1/jobs' करता हूं तो मुझे केवल कंपनी की नौकरियां मिलेंगी। –