/ / Iberna molti a molti su molti a - ibernazione, annotazioni, molti-a-molti, chiave primaria composita

Hibernate Many to Many su molti a - hibernate, annotazioni, molti-a-molti, chiave primaria composta

Sto cercando di mappare un database esistente su Hibernate usando le annotazioni. Il problema è il seguente.

"organisation" e "organisation_roles" hanno una relazione da molte a molte che viene risolta in a tabella "organisation_has_roles" utilizzando le due chiavi primarie come chiave primaria composita nella tabella di join.

Successivamente c'è una tabella "utenti". Gli utenti possono avere un ruolo unico in più organizzazioni. Ciò viene nuovamente risolto in una tabella di join denominata "users_has_organizations_and_role" che ha una chiave primaria composita di "user_id", "organisation_id" e "organisation_role_id" e un indice_unico su "user_id" e "organisation_id".

"Users_has_organizations_and_role" fa riferimento alla chiave primaria composita "organisation_has_roles" (organisation_id, organisation_role_id) e alla tabella degli utenti (user_id)

Non sono stato in grado di trovare esempi su questo argomento che ha funzionato.

È possibile mappare questo. Quali annotazioni dovrei usare e come?

Sto usando Hibernate 4, anche se potrebbe non importare ..

risposte:

1 per risposta № 1

Il problema principale con questo approccio è che hai una discrepanza ORM non mappabile: hai un'entità nel tuo database (organization_has_roles) che viene tradotto come relazione in OO. Poiché questa relazione non è un'entità e non ha @Id, non può essere referenziato in un'altra entità.

Una soluzione è mappare l'entità del database organization_has_roles in un'entità JPA / Hibernate, con una chiave composita o con una chiave sintetica (qualunque cosa tu preferisca). È quindi possibile fare riferimento a questa entità nel proprio User modello.