मेरे पास दो कक्षाएं हैं।जेपीए 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);
अपने लिंक के लिए धन्यवाद, लेकिन मैं नहीं दिख रहा है कि यह कैसे मेरे सवाल का जवाब में मदद करता है। यह एक द्विपक्षीय संबंध है, जैसा कि मैं कोड में दिखाता हूं। – Risu
यह आपके प्रश्न पर वापस आया था 'क्या कुछ बदल गया है, या क्या मैं कुछ गलत कर रहा हूं?' तो जवाब यह है कि आप गायब नहीं हैं। इस तरह इसे लागू किया जाना चाहिए। हालांकि आप इसे यूनिडायरेक्शनल बना सकते हैं और उन्हें अलग से जोड़/हटा सकते हैं। यह तुम्हारी पसंद है (AFAIK)। – pms
मेरे भ्रम को क्षमा करें, लेकिन क्या आप 'r.getNights() जोड़ रहे हैं। (नई रात());' (संपादन से पहले) को एसोसिएशन को बचाने के लिए काम करना चाहिए? – Risu