2014-05-16 2 views
0

Je ne suis pas sûr si c'est un bug ou mon malentendu. Merci de m'aider. Si c'est un bug, je peux lever un ticket jira avec Grails.Grails domaine removeFrom essaie de supprimer basé sur Index au lieu de l'objet

Ma classe de domaine ressemble à ci-dessous.

class MyDomainClass { 
    List ids 

    static hasMany = [ids:Integer] 
} 

Lorsque je fais ce qui suit, cela fonctionne très bien.

def my = MyDomainClass.get(1) 
my.addToIds(2) 
my.save(flush:true) 

Maintenant, voici le problème. Si j'essaye de retirer le 2 des identifiants je reçois IndexOutOfBoundsException.

my.removeFromIds(2) //This is trying to get the index instead of the value. 
(java.lang.IndexOutOfBoundsException: Index: 2, Size: 1) 

Cela fonctionne si j'ai la propriété comme "static hasMany = [ids:String]" dans mon objet de domaine. Mais chaque fois que je dois utiliser .toString et .toInteger que je ne veux pas.

Je crois qu'il n'y a pas de méthode removeFrom {propriété} (index) et il n'y a removeFrom {propriété} (Object)

Grails version: 2.2.2

Répondre

0

Sans aller plus dans les détails, je « d enroulez le Integer id dans une nouvelle classe de domaine comme

class MyId { 

    MyId(id){ this.id = id } 

    static belongsTo = MyDomainClass 

} 

et utiliser hasMany d'une manière appropriée:

class MyDomainClass { 

    static hasMany = [ids:MyId] 
} 

puis

def my = MyDomainClass.get(1) 
my.addToIds new MyId(2) 
my.save(flush:true) 
my.removeFromIds(MyId.get(2)) 

devrait fonctionner correctement

0

Au lieu de créer une nouvelle classe de domaine juste pour envelopper l'id, je l'ai utilisé à long et son travail comme prévu. Je crois que removeFrom méthode avec l'argument en tant que Integer est là pour une raison (Pour maintenir l'ordre de la liste). Donc, le code modifié ressemblera à ceci.

class MyDomainClass { 
    List ids 
    static hasMany = [ids:Long] 
} 
Questions connexes