Primeiro :
Seu FK deve referenciar o PK da entidade referenciada. No caso instantâneo, você deve ter
person.conference_room_id
que faz referência a conferenceroom.id
. Se você deseja que seu code
para ser o campo de identificação para o ConferenceRoom
entidade, não use uma chave substituta. Se o code
coluna não é um candidato PK, então também não é um candidato FK. Segundo :
Mesclar :
Persistir :
Acho que você confundiu
merge
com persist
. Pelo que posso dizer pelo código fornecido, você está criando um novo ConferenceRoom
e não modificar um existente. Portanto, merge
não vai fazer o que você quer que ele faça. Tente alterar seu método (fornecido) para o seguinte: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);
}
Essas coisas devem corrigir os problemas que você levantou.