2010-12-30 17 views
6

मुझे बहुत अजीब समस्या है, हम जेपीए 2.0 का उपयोग कर रहे हैं, हाइबरनेट एनोटेशन आधारित जेपीए डीडीएल के माध्यम से जेनरेट किया गया डाटाबेस सत्य और MySQL डेटाबेस के रूप में है;जेपीए 2.0 प्रदाता हाइबरनेट

मैं कुछ संदर्भ कक्षाएं और फिर मेरा पोरबल प्रदान करूंगा।

@MappedSuperclass 
public abstract class Common implements serializable{ 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "id", updatable = false) 
private Long id; 

@ManyToOne 
@JoinColumn 
private Address address; 
     //with all getter and setters 
     //as well equal and hashCode 

} 

@Entity 
public class Parent extends Common{ 
     private String name; 
     @OneToMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST}, mappedBy = "parent") 
     private List<Child> child; 
     //setters and rest of class 
} 

@Entity 
public class Child extends Common{ 
//some properties with getter/setters 
} 

@Entity 
public class Address implements Serializable{ 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "id", updatable = false) 
private Long id; 

     private String street; 
     //rest of class with get/setter 

} 

कोड में के रूप में आप देख सकते हैं इसलिए दोनों का पता संपत्ति और आईडी है, समस्या तब होती है जब परिवर्तन माता पिता कक्षा में पता संदर्भ यह एक ही परिवर्तन को दिखाने के सारे बच्चे सूची में वस्तुओं है कि माता पिता और बच्चे कक्षाओं आम वर्ग फैली और अगर बच्चे कक्षा में परिवर्तन का पता संदर्भ तो पर विलय यह माता-पिता का पता संदर्भ के रूप में अच्छी तरह से

बदल जाएगा मैं यह पता लगाने की यह है नहीं पा रहा हूँ जेपीए की समस्या है या हाइबरनेट

+1

यहां कुछ मैपिंग जानकारी गायब है। क्या आप विरासत को मैप करने का प्रयास कर रहे हैं या क्या आप समान संरचना वाले अलग-अलग माता-पिता तालिका और बच्चे तालिकाएं हैं? क्या आप क्लास लेवल एनोटेशन (@ एंटीटी इत्यादि) को अपने पास रख सकते हैं। –

+0

स्प्रिंग एमवीसी के संदर्भ हटाए गए, क्योंकि यह प्रासंगिक नहीं है, और इस मुद्दे को भ्रमित करता है। – skaffman

+0

धन्यवाद डेविस हां मैं इन एनोटेशन को भूलना भूल गया, असल में मेरे पास माता-पिता और बच्चे के लिए विरासत वर्ग के सामान्य क्षेत्रों के साथ अलग-अलग टेबल है। जिस चीज को मैं समझ नहीं पा रहा हूं वह है कि यह माता-पिता में बच्चे-> पते का संदर्भ क्यों बदलता है। जब मैं केवल माता-पिता – Rooh

उत्तर

1

आप पता के उदाहरण साझा किया है , जब बच्चे के "दायरे" में होता है तो परिवर्तन माता-पिता को प्रभावित करता है, क्योंकि आप मूल वस्तु में एक ही पता उदाहरण से निपट रहे हैं।

उदाहरण के लिए:

Parent1.address => Address #1 
Child1.address => Address #2 
Child2.address => Address #2 
Child3.address => Address #1 

इस मामले में, अगर आप Child3.address.street बदलने के लिए, इसका मतलब है कि यह भी Parent1.address.street बदल दिया है। ध्यान दें कि पेरेंट 1 और चाइल्ड 3 में पता क्या है, यह आईडी है। यदि वे एक ही आईडी रखते हैं, तो वे एक ही उदाहरण हैं (यानी: दोनों वस्तुओं के बीच "साझा")।

+0

partenon इसके साझा ऑब्जेक्ट पेरेंट का अपना पता नहीं है और chlid ऑब्जेक्ट का अपना पता है। ताकि ऑब्जेक्ट्स अलग-अलग ऑब्जेक्ट न हों, केवल कोड प्रबंधन के सामान्य वर्ग के उपयोग में रखें, यहां तक ​​कि मैंने सामान्य वर्ग को हटाकर और माता-पिता और बच्चे में पता संपत्ति डालकर अंतर वर्ग में पता रखा है। क्या EntityManager के साथ कुछ समस्या हो सकती है – Rooh

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