Чтобы получить столбец внешнего ключа (без соединения) при сопоставлении однонаправленного отношения OneToMany, я следую инструкциям в соответствии с справочной документацией Grails (версия 2.2.3), section 6.5.2.1 Отображение OneToMany, которое содержитОднонаправленные отношения OneToMany без joinTable
С однонаправленными ассоциациями внешний ключ должен быть указан в самой ассоциации. В приведенном примере однонаправленный OneToMany отношения между Person (заменен на один) и адрес (заменен Many), следующий код изменит внешний ключ в Many таблице
class One {
static hasMany = [manyCollection:Many]
static mapping = {
manyCollection(column:"ONE_ID")
}
}
Однако, когда я бегу
One one = new One()
one.addToManyCollection(new Many())
one.save()
я получаю в консоли
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
(?, ?)
Примечание Grails кр eate joinTable называется one_many. Итак, мой вопрос: это ошибка или что-то еще? Что я должен сделать, чтобы избавиться от joinTable?
Даже когда я использую что-то вроде
class One {
static hasMany = [manyCollection:Many]
static mapping = {
manyCollection(joinTable:false)
}
}
как было подчеркнуто here, я получаю тот же результат
Неправильная справочная документация. ** Мы должны использовать joinTable: false ** вместо столбца. Если я использую только столбец, как указано в документации, будет создан joinTable. –