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.