Проблемы с настройкой JoinTable в Grails 3.
У меня есть два класса предметной области (A и B) с отношением «многие ко многим». В Grails 3 я определил домены с отображением JoinTable. В базе данных (MySql v5) у меня есть три таблицы A, B и таблица соединений A_B. Таблица B использует «varchar» в качестве первичного ключа sqlType. Таблица A использует "int" в качестве первичного ключа sqlType.
Я добавил A и B в свою базу данных вместе с записью в таблице соединений, чтобы связать их вместе.
В моем тестовом коде, когда я пытаюсь загрузить экземпляр A, A.get (id), я получаю сообщение об ошибке, указывающее, что тип ForeignKey в JoinTable неизвестен.
Domain A:
static hasMany = [bs: B]
static mapping = {
table "A"
id column: 'id', sqlType: 'int'
bs joinTable: [name: "A_B", key: "a_id"]
}
Domain B:
static hasMany = [as: A]
static mapping = {
table "B"
id column: 'id', sqlType: 'varchar'
as joinTable: [name: "A_B", key: "b_id"]
}
Таким образом, кажется, что "varchar" в B или иностранный ключ B в таблице соединения интерпретируется как Long.
Мне удалось обойти эту проблему, добавив третий домен для JoinTable, определив столбцы.
Domain AB
Long aId
String bId
static mapping = {
table "A_B"
id composite: ['aId', 'bId']
aId column: 'a_id', sqlType: 'int'
bId column: "b_id", sqlType: 'varchar'
}
Похоже, я должен иметь возможность настроить JoinTable в Grails 3 без необходимости определять JoinTable как домен. Кто-нибудь знает, как это сделать?