grails addTo для ввода повторяющихся данных для отношения hasMany - PullRequest
5 голосов
/ 18 мая 2011

У меня довольно простые отношения hasMany, в которых «product» hasMany «пакетов».Я запускаю скрипт, чтобы попытаться заполнить данные, который отлично работает при первом запуске.Однако при втором запуске он начинает вводить дубликаты, которые я, хотя и не смог сделать для hasMany

package = Package.findBySourceId(packageId) ?: new Package(name:packageName, price:packagePrice, sourceId:packageId).save(flush:true)

product = Product.findBySourceId(productId)                 
product.addToPackages(package)
product.save(flush:true)

Когда я включаю запись в sql, я вижу, что иногда select, который должен работать на addToPackagesзвонок не запускается.Он просто делает выбор, чтобы найти продукт, а затем вставляет его в таблицу соединений.

Я не хочу добавлять точные запросы из-за работы, но в основном это похоже на

Select -> for the initial package which it finds

Select -> for product which it finds by the product id

Insert -> insert into the join table without even a select to check if an entry exists

Однако иногда вместо этой вставки он запускает выборку и находит совпадение, и процесс начинается заново.Никаких идей о логике, которая происходит здесь за Граалями.Имейте в виду, у меня запущен скрипт, который извлекает данные тысячами строк, это проблема сеанса как-то?

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Использовали ли вы Список или Набор для своей коллекции со стороны «многие» вашего «один ко многим»? По умолчанию это Set, который должен ограничивать дубликаты. Если вы сопоставили коллекцию с помощью Списка, возможно, вы создали проблему.

В качестве альтернативы, убедитесь, что свойство идентичности «пакет» имеет правильное поведение для equals () и hashCode ().

...