在我的应用程序中有以下关系:Page hasMany Paragraphs,我需要创建一个查询,返回段落数少于限制的所有页面。问题是页面是在另一个应用程序中创建的,大约每秒2个,而段落表包含的内容超过 200万行。所有标准grails方法,如动态查找程序和条件查询只是挂起,因为它们创建非常不理想的sql。在数据库控制台中,以下查询执行作业:
select * from ( select a.id, count(b.page_id) count from page a left join paragraph b ON a.id = b.page_id group by 1) sub WHERE sub.count <= 10 LIMIT 1000
我不能将此查询转换为HQL。我知道有groovy sql可用,但它的rows方法返回一个GroovyResult列表,而不是域类列表。有没有更好的方法解决这个问题?
答案 0 :(得分:0)
如果查询过于复杂,我倾向于这样做:
def results = new Sql(dataSource).rows(SQL)*.id*.asType(Integer).colect(DomainClass.&get)
我知道它看起来并不太好,你可能不会得到任何荣誉,但它完成了工作。 但是,如果你想使用更具表现力的东西,你可以试试JOOQ(http://www.jooq.org/)