многие ко многим не сохраняются в приложении gorm / grails
-
05-09-2019 - |
Вопрос
В моем приложении grails 1.1 у меня есть примерно следующее
class AppCategory {
static belongsTo = App
static hasMany = [ apps: App ]
String name
}
class App {
static hasMany = [ categories: AppCategory]
String name
}
App app = new App()
AppCategory appCat = AppCategory.findByName('blah')
app.addToCategories(appCat)
app.save()
Правильные таблицы (app, app_category и app_categories) созданы, и все столбцы кажутся нормальными, но в итоге я не получаю никаких записей в таблице ассоциаций и никаких ошибок.Таблица app_category и таблица app заполнены правильно.
Нужно ли мне вручную управлять доменным объектом для ассоциативной таблицы?Или, еще лучше, я просто упускаю что-то совершенно очевидное?
Решение
Ну, одна вещь, которая не представлена в вашем примере выше, заключается в том, что вы не дали имя своему экземпляру приложения, даже если это обязательное поле (поля grails обнуляются: false по умолчанию, если вы явно не укажете иное).Держу пари, если вы проверите
app.hasErrors()
После вашего app.save() вы увидите, что в нем действительно есть ошибки, которые вы можете перечислить в коллекции app.errors.
В остальном, то, что у вас есть, в порядке, и этот код отлично работал для меня с объектами домена, которые у вас есть выше:
AppCategory appCat = new AppCategory(name: "blah")
appCat.save()
assert !appCat.hasErrors()
App app = new App(name: "testApp")
app.addToCategories(appCat)
app.save()
assert !app.hasErrors()