मैंने वास्तव में एक कष्टप्रद स्थिति पर ठोकर खाई है: मैं अपने ऐप के बैकएंड के रूप में हाइबरनेट & वसंत का उपयोग कर रहा हूं और ऐसा लगता है कि कुछ मामलों में, जो संस्थाएं किसी विशेष संबंध में हैं इकाई को डीबी से सामान्य इकाई वस्तुओं के रूप में नहीं लाया जाता है, लेकिन जावासिस्ट प्रकार के रूप में। उदाहरण के लिए:वास्तविक हाइबरनेट इकाई प्रकारों के बजाय जावासिस्ट प्रकार प्राप्त करना
मैं निम्नलिखित रिश्तों के साथ अभियान इकाई है:
@Entity
@Table(name = "campaign")
public class Campaign implements Serializable {
[..]
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {
"campaign_id", "dealer_id" }), name = "campaign_has_dealer", joinColumns = { @JoinColumn(name = "campaign_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "dealer_id", nullable = false) })
private List<Dealer> dealers = new ArrayList<Dealer>();
@ManyToMany
// (fetch = FetchType.LAZY)
@JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {
"campaign_id", "sales_area_id" }), name = "campaign_has_sales_area", joinColumns = { @JoinColumn(name = "campaign_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "sales_area_id", nullable = false) })
private List<SalesArea> salesAreas = new ArrayList<SalesArea>();
}
इस अभियान से जुड़े salesAreas पुन: प्राप्त करने पर, मैंने, _ $$ _ javassist_56 SalesArea की एक सूची प्राप्त है, जबकि डीलरों के लिए, मैं सामान्य मिल हाइबरनेट इकाइयों। चूंकि ग्राहक भाग जीडब्ल्यूटी पर आधारित है, इसलिए हम सामान पुनर्प्राप्त करने के लिए RequestFactory का उपयोग करते हैं। मैंने शुरू में सोचा था कि यह प्रॉक्सी, लोकेटर और इतने पर एक समस्या थी, लेकिन मैंने सेवा में ब्रेकपॉइंट सेट किया है जहां इन्हें पुनर्प्राप्त किया गया है और वे उन्हें चुनने के बाद सीधे जावासिस्ट ऑब्जेक्ट्स हैं। ऐसा लगता है कि FetchType.LAZY एनोटेशन (हालांकि निश्चित रूप से एक वांछनीय समाधान नहीं) को भी हटा रहा है, वही बात होती है। यह अन्य प्रकार के रिश्तों के साथ भी हुआ, न केवल @ManyToMany।
हम एनडब्ल्यूशन के लिए जीडब्ल्यूटी 2.3, स्प्रिंग 3, हाइबरनेट 3.6.3 और जेपीए 2.0 का उपयोग कर रहे हैं।
किसी भी सुझाव की सराहना की जाएगी।
अग्रिम
FetchType.LAZY जेपीए डिफ़ॉल्ट है। इसे हटाने से कुछ भी नहीं होता है, जब तक कि आप इसके बजाय FetchType.EAGER निर्दिष्ट नहीं करते। – viktor