#hibernate #grails #many-to-many #batch-insert
#переход в спящий режим #grails #»многие ко многим» #пакетная вставка
Вопрос:
У меня есть отношение «многие ко многим» между классами A и B, A владеет отношением. таким образом, A несет ответственность за каскадное сохранение B и обновление таблицы соединений .
псевдокод :
A {
hasMany = [bCollection : B]
}
B {
hasMany = [aCollection : A]
belongsTo = A
}
У меня есть цикл для пакетной вставки
// transaction begin and hibernate session opened
for(int i in 1..10){
b = new B(...)
a.addToBCollection(b)
a.save(flush:true)
...
}
//transaction committed
Все десять экземпляров b были сохранены с каскадным сохранением от A до B, каждый экземпляр b имеет сгенерированный идентификатор (1001 ~ 1011)
table b
1001 b1
1002 b2
1003 b3
...
странно то, что в таблице объединения есть только одна запись, и это последний экземпляр b, который учитывается, что означает, что в таблице объединения у меня есть одна запись :
join table a_b
(a.id,1011)
у вас есть какие-нибудь идеи?
спасибо : )
Комментарии:
1. когда я попробовал домен, он работает идеально, как вы и ожидали от меня.
2. Вызываете ли вы
b.save(flush:true)
aftera.save(flush:true)
? Возможно, проблема в этом.3. Я попробовал этот код, user = new User(); для (int i в 1 ..5){ Customer клиент = новый клиент () пользователь.addToCustomer(customer) пользователь.save(flush: true) i рендеринг клиента } println user.customer рендеринг пользователя