Per realizzare una colonna chiave esterna (senza joinTable) quando la mappatura di un rapporto OneToMany unidirezionale, seguo le fasi secondo Grails (versione 2.2.3) documentazione di riferimento, section 6.5.2.1 mappatura OneToMany, che affermaunidirezionale OneToMany rapporto senza joinTable
Con associazioni unidirezionali è necessario specificare la chiave esterna sull'associazione stessa. Per esempio dato un rapporto OneToMany unidirezionale tra persona (sostituito da uno) e l'indirizzo (sostituito da molti), il seguente codice cambierà la chiave esterna nella tabella Molte
class One {
static hasMany = [manyCollection:Many]
static mapping = {
manyCollection(column:"ONE_ID")
}
}
Tuttavia, quando ho eseguito
One one = new One()
one.addToManyCollection(new Many())
one.save()
salgo in console
insert
into
one
(id, version)
values
(null, ?)
insert
into
many
(id, version)
values
(null, ?)
insert
into
one_many
(one_many_collection_id, many_id)
values
(?, ?)
Avviso Grails cr mangia un joinTabella chiamata one_many. Quindi, la mia domanda: è un bug o qualcos'altro? Cosa devo fare per sbarazzarmi della tabella di join?
Anche quando uso qualcosa come
class One {
static hasMany = [manyCollection:Many]
static mapping = {
manyCollection(joinTable:false)
}
}
come evidenziato here, ho la stessa uscita
La documentazione di riferimento è errata. ** Dovremmo usare joinTable: false ** invece di column. Se utilizzo solo la colonna come indicato dalla documentazione, verrà creato un joinTable. –