J'ai essayé de remplacer la méthode dynamique addTo * fournie par Grails/GORM mais cela ne semble pas fonctionner.Comment remplacer les méthodes addTo * et RemoveFrom * GORM/Grails?
Voici le code:
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)
Le problème est que lorsque vous appelez addToPlayers je suis arrivé à l'exception suivante:
java.lang.NullPointerException: Cannot invoke method add() on null object
Donc, fondamentalement, il semble que je dois me initialiser la collection « joueurs '.
Eh bien, avant de faire cela, je voudrais avoir quelques idées sur le mécanisme GORM:
1 - Quelle est l'implémentation par défaut pour les collections dans Gorm (je sais que c'est une implémentation de java.util.Set mais lequel?)
2 - Est-ce la bonne chose à faire (en surchargeant la méthode addToPlayers)? (Mon seul besoin est de créer/supprimer un objet MatchPlayer chaque fois qu'un joueur est ajouté/supprimé dans l'instance de match). Si oui, pourquoi ai-je une exception? Avez-vous un meilleur design pour cela?
Merci.
Thx. En ce qui concerne ma deuxième question, pensez-vous qu'il est recommandé de surcharger les méthodes addTo */removeFrom *? Avez-vous une autre approche? – fabien7474
Bien sûr, cela vous permet d'utiliser l'approche Grails standard, mais avec un comportement personnalisé. Une alternative serait de tout déplacer dans une méthode de service, mais c'est une chose de préférence. –