В моей команде ровно 4 игрока. Позиция каждого игрока важна, поэтому я подумал, что я неплохо использую карту для своих игроков с клавишами: pos1
, pos2
, pos3
, pos4
class Team {
Map players = [pos1:null, pos2:null, pos3:null, pos4:null]
static hasMany = [players:Player]
League league
static belongsTo = [club:Club]
static constraints = {
league nullable:true
players nullable:true
}
}
и мой игрок:
class Player{
static belongsTo = [club:Club, team:Team]
String firstname
String lastname
Team team
static constraints = {
team nullable:true
firstname nullable:true
lastname nullable:true
}
public String fullname() {
return firstname + " " + lastname + " - " + team?.id ?: "R"
}
}
Я использую метод addToPlayers()
для автоматического обновления проигрывателя, но я получаю сообщение об ошибке при попытке выполнить следующее:
def player = new Player(firstname:"Peter", lastname:"Pan")
def team = new Team()
team.addToPlayers([pos1:player])
Stacktrace говорит:
Groovy.lang.MissingMethodException: No signature of method:
org.hibernate.collection.PersistentMap.add() is applicable for argument types:
(at.panda.Player) values: [at.panda.Player : null]
Possible solutions: any(), any(groovy.lang.Closure), any(groovy.lang.Closure), wait(),
wait(long), get(java.lang.Object)
at at.panda.PlayerController$_closure4.doCall(PlayerController.groovy:39)
at at.panda.PlayerController$_closure4.doCall(PlayerController.groovy)
at java.lang.Thread.run(Thread.java:662)
Это стоило мне много времени, и я надеюсь, что кто-то может мне помочь. Мне не нужно придерживаться «Карты», если у вас есть лучшее решение.