2011-02-26 19 views
8

मेरे पास एक द्विपक्षीय, एक से कई, और कई से एक रिश्ते हैं। कहते हैं, एक कंपनी कई व्यक्तियों कंपनी में,जेपीए वनटॉनी, हमेशा खाली

@OneToMany(mappedBy = "company", fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
private Collection<Person> persons; 

और व्यक्ति में,

@ManyToOne 
@JoinColumn(name="COMPANY_ID") 
private Company company; 

अब है, और एक व्यक्ति एक कंपनी है, इसलिए, का कहना है कि मैं एक @PrePersist/@PreUpdate विधि है कंपनी, जहां जब यह अद्यतन किया जाता है, मैं सभी लोगों पर एक ही टाइमस्टैम्प सेट करने के लिए ... की तरह चाहते हैं,

@PrePersist 
@PreUpdate 
public void setLastModified() { 
    this.lastModified = System.currentTimeMillis(); 
    if (persons != null) { 
     for (Person person : persons) { 
      person.setLastModified(this.lastModified); 
     } 
    } 
} 

जब मैं इस डिबग पर, मैं देखता हूँ कि कंपनी में व्यक्तियों क्षेत्र हमेशा खाली है। जब मैं व्यक्तियों के संग्रह के प्रकार को देखता हूं, तो यह एक java.util.Vector है। सुनिश्चित नहीं है कि यह प्रासंगिक है या नहीं। मुझे कुछ ऑटो लोडिंग जेपीए संग्रह प्रकार देखने की उम्मीद है।

मैं क्या गलत कर रहा हूं?

उत्तर

0

fetch = FetchType.Eager @ManyToOne एनोटेशन में जोड़ें। आपने इसे रिश्ते के दूसरी तरफ जोड़ा।

+0

धन्यवाद। मुझे अभी तक इसे सत्यापित करने का मौका नहीं मिला है, लेकिन जब मैं करता हूं तो मैं इस प्रश्न को अपडेट कर दूंगा। –

+3

यह समस्या का समाधान नहीं करता है। –

0

यदि आप personListCompany में प्राप्त करना चाहते हैं, तो FetchType.EAGER का उपयोग करें। जेपीए में,

@--ToOne => Default : FetchType.EAGER 
@--ToMany => Default : FetchType.LAZY 

@JoinColumn(name="COMPANY_ID", fetch = FetchType.EAGER) 
private Company company; 
2

आप अपने रिश्ते के दोनों किनारों सेट करना होगा। जब आप कोई नया व्यक्ति बनाते हैं और अपनी कंपनी सेट करते हैं तो आपको कंपनी के व्यक्तियों (कर्मचारियों?) में व्यक्ति भी जोड़ना होगा।

इसके अलावा, आपको किसी ऑब्जेक्ट के प्रीपेर्सिस्ट/अपडेट में कोई अन्य ऑब्जेक्ट नहीं बदलना चाहिए, आपको अपने प्रीपेर्सिस्ट/अपडेट इवेंट का उपयोग करना चाहिए।

देखें, http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Object_corruption.2C_one_side_of_the_relationship_is_not_updated_after_updating_the_other_side

+0

मैं इस लिंक को निर्दिष्ट करने के एक प्राथमिक संस्करण के साथ अपना खुद का हैक जोड़ने जा रहा था, लेकिन मुझे नहीं पता था कि यह वास्तव में विशेषज्ञों द्वारा सुझाए गए दृष्टिकोण थे। – blagae

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