2015-05-05 19 views
7

Quindi, c'è un comportamento con innodb che può causare problemi se alcune tabelle mancano di chiave primaria.Specifica di una chiave primaria su @ElementCollection

Quindi con Hibernate, sto cercando una chiave per specificare una chiave primaria su una tabella @ElementCollection con un Set come struttura dati underling.

Ho trovato un modo per avere una chiave primaria con una mappa, ma è un po 'strana perché non ho bisogno di una mappa.

Ho anche trovato una risposta relativa a @Embeddable, ma non ho bisogno di questo tipo di complessità. Sto usando un Set o Set come struttura dati nelle mie entità.

Qualche idea su come ottenerlo?

+0

Utilizzare una relazione @ ManyTo *: se si dispone di una chiave primaria, si ha una nuova entità. –

+1

È piuttosto fastidioso creare una nuova entità solo per un insieme di int. – plcstpierre

risposta

8

Se si utilizza un Set e si rende l'elemento Column non nullo, allora hibernate crea una chiave primaria con la colonna join e la colonna dell'elemento.

+1

Buona soluzione semplice. Ha funzionato per me –

+2

Non è necessario impostare null utilizzando @Column (nullable = false) e non utilizzando l'annotazione @NotNull. @Column (nullable = false) viene utilizzato per indicare i dettagli dello schema del database. Vedi [@NotNull vs @Column (nullable = false)] (https://stackoverflow.com/a/7439544/1997088) per maggiori dettagli – Black

2

@ElementCollection Impossibile prendere una chiave primaria, perché i tipi Embeddable non possono avere un identificatore.

È possibile effettuare il add an @OrderColumn per ottimizzare le istruzioni SQL generati.

Se è necessaria una chiave primaria, è necessario convertire lo @ElementCollection in un'associazione @OneToMany.

+0

Avete qualche riferimento per questo? – plcstpierre

+0

L'articolo che ho inserito nella risposta è un buon punto di partenza. Quindi devi generare manualmente lo schema per creare il PK poiché Hibernate supporta solo PK sulle entità. –

+0

Oops. Non è una questione di prestazioni, ma con la replica di MySQL, quindi non credo che @OrderColumn mi salverà. La mia vera domanda era: hai un riferimento per la restrizione sull'ibernazione? – plcstpierre

Problemi correlati