String Grails domain removeFrom正在尝试基于索引而不是对象进行删除
我不确定这是错误还是我的误解。请帮帮我。如果这是一个bug,我可以用Grails提出一张jira罚单 我的域类如下所示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
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]
}