我已经使用 Grails 2.2.3 开始了一个小项目,现在我想知道用关系更新模型的正确/最有效的方法是什么。
class Computer extends Inventory {
String hostName
...
static hasMany = [memories: Memory]
}
class Memory extends Inventory {
Integer capacity
String bank
...
static belongsTo = [computer: Computer]
}
定期从外部源安排数据输入,没有用户与视图交互。
当只是做一个mem.each { computer.addToMemories(it) }
时,每个计划的运行都会有一个重复的内存条目。我可以通过检查是否存在相应的条目来解决这个问题:
mem.each {
if (!Memory.findWhere(it)) computer.addToMemories(it)
}
如果将新的内存模块添加到计算机,这将起作用。但是想象一下,模块是从计算机中删除的。您可以通过已保存和给定的模块创建嵌套循环并比较它们。但这是一些编码,不是很好。或者你可以先做 aremoveAll()
然后让所有模块添加为新模块。但这也不是很好。并且id
会增长得非常快。
你知道处理这种情况的更聪明的方法吗?是不是有可能说“嘿模型,这是这台计算机的最新内存模块集。如果它是新的,则添加它,如果已更改则更新它,或者如果它已从计算机中删除,则将其删除。 " 或:“将您的信息更新到此集合。”
有任何想法吗?
提前致谢,
克里斯