我正在研究Grails。 在某些时候,我必须根据它们的ID从数据库中获取大量对象。 如果我通过id执行此ID,则性能非常糟糕。
ids.each{
Myclass.findById( id )
...
}
鉴于存储批处理有用的 withTransaction 闭包,是否可以做类似的操作来获取对象,而不是存储它们?
另一个想法可能是长的HQL查询,如:
"select * from Myclass where (id = 1) OR ( id = 2) ... OR ( id = n )"
这是一个好的解决方案吗?
谢谢!
答案 0 :(得分:2)
如this question所述,HQL支持更好的语法,可根据GORM的find()
方法支持的一组值进行选择。 GORM dynamic finders也支持如下语法:
def myObjs = MyClass.findByIdInList(ids)
同样,如果您的操作是只读的,则可以使用getAll()
,这将利用Hibernate可以进行只读转换的优化。