كيفية تجاوز addto * وإزالة * طرق غسم / غرابر؟
سؤال
حاولت تجاوز الطريقة الديناميكية AddTo * المقدمة من الشجر / غورم ولكن لا يبدو أنها تعمل.
هنا هو الرمز:
class Match {
static hasMany = [players: Player, matchPlayers: MatchPlayer]
void addToPlayers(Player player) {
if (players.add(player)) {
MatchPlayer matchPlayer = new MatchPlayer(match: this, player: player)
matchPlayers.add(matchPlayer)
}
}
}
ma = new Match().save()
ma.addToPlayers(player1)
المشكلة هي أنه عند استدعاء AddToPlayers، حصلت على الاستثناء التالي:
java.lang.NullPointerException: Cannot invoke method add() on null object
لذلك يبدو أنه يجب علي تهيئة نفسي "لاعبين" جمع ".
حسنا، قبل القيام بذلك، أود الحصول على بعض الأفكار حول آلية غواسم:
1 - ما هو التنفيذ الافتراضي للمجموعات في غورم (أعرف أنه تنفيذ java.util.set ولكن أي واحد؟)
2 - هل هو الشيء الصحيح الذي يجب القيام به (عن طريق تجاوز طريقة AddToPlayers)؟ (حالتي الوحيدة هي إنشاء / إزالة MatchPlayer كائن في كل مرة يتم إضافتها / إزالتها في مثيل المباراة). إذا كانت الإجابة بنعم، لماذا لدي استثناء؟ هل لديك تصميم أفضل لهذا؟
شكرا لك.
المحلول
يشبه الكود الخاص بك طريقة النواب القياسية، راجع التعليمات البرمجية لهذا في org.codehaus.groovy.grails.pluginsdomainclassgrailsplugin.addrelationshipmanationsmethods (). التنفيذ الأول الأولي إما HASHST إذا كنت لا تحدد نوع المجموعة، أو الأشجار إذا حددت مجموعة فرز، على سبيل المثال
static hasMany = [players: Player, matchPlayers: MatchPlayer]
SortedSet players