पहले :
आपके 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);
}
आपके द्वारा उठाए गए मुद्दों को इन बातों से ठीक करना चाहिए।