पहले :
आपके FK को संदर्भित निकाय के PK का संदर्भ देना चाहिए। इस मामले में, आपके पास person.conference_room_id होना चाहिए जो conferenceroom.id . का संदर्भ देता है . अगर आप अपना code चाहते हैं ConferenceRoom . के लिए पहचान क्षेत्र होने के लिए इकाई, फिर सरोगेट कुंजी का उपयोग न करें। अगर code कॉलम पीके उम्मीदवार नहीं है, तो यह एफके उम्मीदवार भी नहीं है।
दूसरा :
मुझे लगता है कि आप भ्रमित हो गए हैं merge persist . के साथ . दिए गए कोड से मैं जो बता सकता हूं, उससे आप एक नया ConferenceRoom बना रहे हैं और किसी मौजूदा को संशोधित नहीं करना। इसलिए, merge आप वह नहीं करने जा रहे हैं जो आप करना चाहते हैं। अपनी (प्रदान की गई) विधि को निम्न में बदलने का प्रयास करें:
public ConferenceRoom getNewConferenceRoom(Person p) {
ConferenceRoom r = new ConferenceRoom();
r.setCode("MyUniqueGeneratedCode");
r.getPeople().add(p);
// sessionFactory is spring injected member
sessionFactory.getCurrentSession().persist(r);
}
आपके द्वारा उठाए गए मुद्दों को इन बातों से ठीक करना चाहिए।