Каскадное сохранение Grails «многие ко многим» в цикле

#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) after a.save(flush:true) ? Возможно, проблема в этом.

3. Я попробовал этот код, user = new User(); для (int i в 1 ..5){ Customer клиент = новый клиент () пользователь.addToCustomer(customer) пользователь.save(flush: true) i рендеринг клиента } println user.customer рендеринг пользователя