5

Così ho fatto questa domanda ieri, ma i pali della porta sono cambiate e la questione è diversa:Hibernate/JPA relazione molti a molti attraverso un tavolo di unirsi e di una chiave composta, numero unico vincolo

Hibernate/JPA Collection of Elements with Many to Many relationship?

Voglio sapere se è possibile creare entità che modelleranno la mia relazione richiesta in modo che Hibernate crei il mio schema quando accendo la mia applicazione.

Il rapporto che voglio assomiglia a questo:

1 http://a8.sphotos.ak.fbcdn.net/hphotos-ak-ash4/417593_10150594114269218_505554217_8657377_1475865815_n.jpg

Il fatto è che la tabella Join può effettivamente contenere le righe che non puntano a tutti gli elementi. La struttura rappresenta la categorizzazione degli elementi in base alla coppia "tipo" e "valore" e vengono immessi nel sistema al di fuori di questa particolare applicazione.

Quello che vorrei essere in grado di fare è impostare la mia entità di ibernazione dell'elemento per contenere un elenco di categorie, tramite una mappatura, in modo che io possa effettivamente vedere quali categorie il mio elemento appartiene a E in modo che la sospensione crei la tabella per me.

Ecco quello che ho finora: la mappatura presente nella mia classe Elemento Entity come questo:

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = { 
     @JoinColumn(name = "type", referencedColumnName = "type"), 
     @JoinColumn(name = "value", referencedColumnName = "value") }) 
@Column(name = "category") 
public List<ElementCategory> getCategories() { 
    return categories; 
} 

Questo fa la maggior parte di ciò che voglio, che crea le mie tabelle di cui sopra, esattamente come io li voglio barra una cosa, c'è un vincolo univoco aggiunto alla tabella degli elementi sulla coppia (tipo, valore). Non voglio questo perché più elementi possono avere lo stesso tipo e coppia di valori, devo essere in grado di fermare il vincolo univoco dall'inizio, ma non riesco a capire come con la mappatura corrente, posso fare questo? Mi manca il punto di una relazione da molti a molti?

+0

Continuo a pensare che sia necessario un inverseJoinColumn per includere l'id di ElementCategory nella tabella di join. – bvanvelsen

+0

Potrebbe essere che suoni più logici che tipo e valore siano un'entità? quindi l'id di questo tipo, entità di valore è una joincolumn del jointable – bvanvelsen

+0

L'ID è implicito nel fatto che ho un insieme di categorie di elementi, come con qualsiasi Set. Come ho già detto, le tabelle vengono impostate correttamente e questo include il collegamento tra "categoria" nella tabella di join e "id" nella tabella ElementCategory. Pensi che il join inverso rimuoverà il vincolo univoco dalla tabella degli elementi? Lo proverò. – Link19

risposta

1

In realtà sembra abbastanza logico che Hibernate inserisca un vincolo univoco sulla colonna type e value.

Si dice nel mapping @ManyToMany che nella funzione di base le joincolumn sono la colonna del tipo e del valore. Quindi in pratica dici che l'ibernazione dovrebbe determinare quale elemento è accoppiato all'ElementCategory in base al valore e alla proprietà type. quindi la combinazione di queste due proprietà dovrebbe essere unica. Altrimenti, l'ibernazione non saprebbe quale Elemento appartiene a quale ElementType

Se si desidera che più entità Element possano essere accoppiate a più Entità ElementType e la combinazione di tipo e valore non è sempre univoca, non è possibile utilizzare tali proprietà come joincolumns

+0

Ma allora non ci sarebbe modo di avere una classe Element contenente un elenco di categorie? È solo sfortuna perché ha bisogno di un design migliore? – Link19

+0

può contenere un elenco di categorie, ma non in base al tipo e al valore se quei 2 valori non sono univoci per ogni elemento – bvanvelsen

+0

Esattamente, ma nelle mie categorie di modello si basano sulla combinazione di tipo e valore e più elementi PUO avere il stessa coppia, quindi è impossibile per me lasciare che l'ibernazione gestisca questo? il meglio che posso fare è implementare alcune funzionalità nel mio servizio che si occupano di categorie separatamente e rendono transitorio l'elenco. – Link19

Problemi correlati