我正在尝试使用一组“模板”对象来填充另一个对象上的和声关系,但是.each不能像我期望的那样工作。
简单地说,我正在建模一个包含许多HouseInstance对象的“World”。每个HouseInstance都与另一个已存在的HouseProto对象相关联,HouseInstance从中获取某些特征(平方英尺,卧室数等)。
因此,当我创建一个World时,我有一个makeHouses例程,为每个HouseProto创建一个HouseInstance,并将HouseProto分配给house实例。
以下是代码:
class World {
static hasMany=[houses: HouseInstance]
static constraints = {
}
void makeHouses() {
HouseProto.each {
def hi=new HouseInstance();
hi.houseProto= it;
hi.world=this;
}
}
}
class HouseInstance {
Neighborhood neighborhood
static belongsTo=[houseProto: HouseProto, world: World]
static constraints = {
}
}
所以我创建了几个“HouseProto”对象,然后运行以下代码:
def w= new World()
w.makeHouses()
这导致在makeHouses中的行发生类型强制错误,我尝试将HouseProto对象分配给HouseInstance对象。
hi.houseProto= it;
'它'当然应该是一个HouseProto实例,因为它是由Domain类上的每个方法实例化的。不过我收到了错误:
Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.lang.Class] to required type [com.grapevine.negotiator2.HouseProto] for property 'houseProto': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:306)
似乎告诉我'它'不是HouseProto,而只是一个非特定类型的java.lang.Class,它不能被强制转换为HouseProto。我不明白这是怎么可能的(或如何解决。)
答案 0 :(得分:0)
HouseProto
是您的域类。我想你需要一个HouseProto
实例列表,对吗?然后:
HouseProto.list().collect {
new HouseInstance(houseProto:it, world:this)
}
我将each
更改为collect
以返回HouseInstance
列表。
答案 1 :(得分:0)
简单的错误。我应该迭代HouseProto.findAll()。每个或类似的东西。不只是HouseProto.each()。