String Grails domain removeFrom正在尝试基于索引而不是对象进行删除

String Grails domain removeFrom正在尝试基于索引而不是对象进行删除,string,grails,indexing,grails-domain-class,String,Grails,Indexing,Grails Domain Class,我不确定这是错误还是我的误解。请帮帮我。如果这是一个bug,我可以用Grails提出一张jira罚单 我的域类如下所示 class MyDomainClass { List ids static hasMany = [ids:Integer] } 当我做以下工作时,它的效果很好 def my = MyDomainClass.get(1) my.addToIds(2) my.save(flush:true) 现在问题来了。如果我尝试从ID中删除2,我会得到IndexOutOfBo

我不确定这是错误还是我的误解。请帮帮我。如果这是一个bug,我可以用Grails提出一张jira罚单

我的域类如下所示

class MyDomainClass {
   List ids

   static hasMany = [ids:Integer]
}
当我做以下工作时,它的效果很好

def my = MyDomainClass.get(1)
my.addToIds(2)
my.save(flush:true)
现在问题来了。如果我尝试从ID中删除2,我会得到IndexOutOfBoundsException

my.removeFromIds(2) //This is trying to get the index instead of the value.
(java.lang.IndexOutOfBoundsException: Index: 2, Size: 1)
如果我的域对象中的属性为
“static hasMany=[ids:String]”
,则此操作有效。但每次我都必须使用.toString和.toInteger,这是我不想使用的

我相信没有removeFrom{property}(索引)方法,只有removeFrom{property}(对象)


Grails版本:2.2.2

无需太多细节,我将把
整数id
包装到一个新的域类中,如

class MyId {

  MyId( id ){ this.id = id }

  static belongsTo = MyDomainClass

}
并以适当的方式使用
hasMany

class MyDomainClass {

  static hasMany = [ids:MyId]
}
然后


应该可以正常工作

而不是创建一个新的域类来包装id,我使用了Long,它的工作方式与预期的一样。我相信参数为整数的removeFrom方法的存在是有原因的(以保持列表的顺序)。因此,修改后的代码将如下所示

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