První :
Váš FK by měl odkazovat na PK odkazované entity. V tomto případě byste měli mít person.conference_room_id
který odkazuje na conferenceroom.id
. Pokud chcete svůj code
být identifikačním polem pro ConferenceRoom
entity, pak nepoužívejte náhradní klíč. Pokud code
sloupec není kandidátem PK, pak také není kandidátem FK.
Za druhé :
Sloučit :
Myslím, že jste si popletli merge
s persist
. Z toho, co mohu říci podle poskytnutého kódu, vytváříte novou ConferenceRoom
a neupravovat stávající. Proto merge
nebude dělat to, co chcete, aby dělal. Zkuste změnit svou (poskytovanou) metodu na následující:
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);
}
Tyto věci by měly vyřešit problémy, na které jste upozornili.