2011-05-17 9 views
5

Bir "ürün" inMany "paketleri" olduğu oldukça basit bir hasMany ilişkisi var. Veriyi denemek ve doldurmak için bir script çalıştırıyorum, bu da ilk seferde iyi çalışıyor. Ancak ikinci kaçak, ben gerçi üzerinde sql günlük koymak bir hasManygrails addMany ilişki için yinelenen veri girmek için

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) 

için mümkün değildi çiftleri inputing başlar, arayacağım olduğunu addToPackages çalıştırmak gerektiğini bazen seçme görebilirsiniz koşma. Ürünü seçmek için seçim yapar ve ardından birleştirme tablosuna düz bir ekleme yapar. Ben tam çünkü işin sorguları ancak eklemek istemiyorum

temelde onun

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 

Ancak bazen yerine o seçilmiş çalışacaktır takıp maç bulmak ve süreç baştan başlar

gibi. Burada mantık hakkında mantık yok. Unutmayın, binlerce satırlık veriyi çeken bir betik var, bu bir şekilde bir oturum sorunu mu?

+0

Bkz Paket sınıf bakmak gibi özü nedir? SourceId özelliğinde ayarlanmış doğru kısıtlamalar var mı? – Pat

+0

Bir çeşit deterministik olmayan davranışınız var gibi görünüyor. uck ... – netbrain

cevap

3

Koleksiyonunuz için bire-birçoğunuzun “çok” tarafında bir Liste veya Set kullandınız mı? Varsayılan, kopyalara karşı kısıtlaması gereken bir Küme'dir. Koleksiyonu bir Liste kullanarak haritalandırdıysanız, sorunu oluşturmuş olabilirsiniz. Alternatif olarak, "package" kimlik özelliğinin equals() ve hashCode() için doğru davranışlara sahip olduğunu doğrulayın. Üste |

+0

Koleksiyonun set yerine bir liste kullanmasını nasıl eşlerdiniz? –

+0

@MartinKlosi Sadece “myObjects” listesini “static hasMany = [myObjects: MyObject]' ifadesiyle belirtin. Örnek için http://stackoverflow.com/questions/520187/defining-default-sort-order-in-grails-gorm adresine bakın. – Antoine

İlgili konular