У меня довольно простая взаимосвязь 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
Однако иногда вместо этой вставки он будет запустите выбор и найдите совпадение, и процесс начнется заново. Понятия не имею, какая логика здесь скрывается за граалями. Имейте в виду, у меня запущен скрипт, который извлекает данные с тысячами строк, это проблема сеанса?