grails addДля ввода повторяющихся данных для отношения hasMany

У меня довольно простая взаимосвязь hasMany, где "продукт" имеетMany "packages". Я запускаю сценарий, чтобы попытаться заполнить данные, который отлично работает при первом запуске. Однако при втором запуске он начинает вводить дубликаты, что, как мне казалось, было невозможно для 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, я вижу, что иногда не выполняется выбор, который должен выполняться при вызове 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

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

5
задан Rob 17 May 2011 в 20:13
поделиться