2014-07-22 8 views
5

मेरे पास दो कक्षाएं हैं।जेपीए 2.1 विदेशी कुंजी कईToOne कैस्केड पर नहीं बचा है

public class Reservation { 
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval=true, mappedBy = "reservation") 
    private List<Night> nights; \\assume getters and setters 
} 

public class Night { 
    @ManyToOne 
    @JoinColumn(name = "RESERVATION_ID") 
    private Reservation reservation; 
} 

इस तरह काम करता है मेरा बचाने:

Reservation r = new Reservation(); 
r.getNights().add(new Night()); 
return dao.save(r); 

यह काम करता है में के रूप में यह आरक्षण की बचत होती है, और यह रात को बचाता है। लेकिन जब मैं डेटाबेस को देखता हूं, तो नाइट टेबल में कॉलम RESERVATION_ID शून्य है।

पिछली परियोजनाओं में (जावा 8 और जेपीए 2.1 में अपग्रेड करने से पहले), मुझे उस संगठन को सहेजने के लिए बच्चे को मूल रूप से मूल ऑब्जेक्ट को सेट करने की आवश्यकता नहीं थी। क्या कुछ बदल गया, या क्या मैं कुछ गलत कर रहा हूँ?

संपादित करें:

यह सही ढंग से संघ की बचत होती है, लेकिन यह आवश्यक हुआ करता था नहीं था।

Reservation r = new Reservation(); 
Night n = new Night(); 
n.setReservation(r); 
r.getNights().add(n); 
return dao.save(r); 
+0

अपने लिंक के लिए धन्यवाद, लेकिन मैं नहीं दिख रहा है कि यह कैसे मेरे सवाल का जवाब में मदद करता है। यह एक द्विपक्षीय संबंध है, जैसा कि मैं कोड में दिखाता हूं। – Risu

+0

यह आपके प्रश्न पर वापस आया था 'क्या कुछ बदल गया है, या क्या मैं कुछ गलत कर रहा हूं?' तो जवाब यह है कि आप गायब नहीं हैं। इस तरह इसे लागू किया जाना चाहिए। हालांकि आप इसे यूनिडायरेक्शनल बना सकते हैं और उन्हें अलग से जोड़/हटा सकते हैं। यह तुम्हारी पसंद है (AFAIK)। – pms

+0

मेरे भ्रम को क्षमा करें, लेकिन क्या आप 'r.getNights() जोड़ रहे हैं। (नई रात());' (संपादन से पहले) को एसोसिएशन को बचाने के लिए काम करना चाहिए? – Risu

उत्तर

1

नीचे दिए गए लिंक में उपलब्ध कराई गई जेपीए उदाहरण के अनुसार, आप बच्चे में पैरेंट ऑब्जेक्ट सेट करना होगा। आप अभिभावक वर्ग में यह कर सकते हैं (बच्चे की गेटर विधि)

http://en.wikibooks.org/wiki/Java_Persistence/OneToMany

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