Sql GORM/HQL-LISTAGG
在GORM(使用grails)中,我需要在subselect中将多个结果合并为一个值。(此子选择的结果将是连接的值,我可以对其进行搜索/排序等…) 查询被写为HQL。在甲骨文中是这样的 可以在HQL中实现类似的功能(例如GORM)Sql GORM/HQL-LISTAGG,sql,oracle,grails,hql,gorm,Sql,Oracle,Grails,Hql,Gorm,在GORM(使用grails)中,我需要在subselect中将多个结果合并为一个值。(此子选择的结果将是连接的值,我可以对其进行搜索/排序等…) 查询被写为HQL。在甲骨文中是这样的 可以在HQL中实现类似的功能(例如GORM) thanskHibernate和位于Hibernate之上的HQL/GORM层不直接支持特定于数据库的功能,如Oracle的listag()。但是,有几种方法可以在Grails中使用本机SQL。如果要将连接的值添加到域对象之一,可以使用GORM的派生属性功能() 大
thanskHibernate和位于Hibernate之上的HQL/GORM层不直接支持特定于数据库的功能,如Oracle的
listag()
。但是,有几种方法可以在Grails中使用本机SQL。如果要将连接的值添加到域对象之一,可以使用GORM的派生属性功能()
大致如下:
class MyDomain {
Long parentId
String titleAgg
static mapping = {
titleAgg formula: '(SELECT LISTAGG(e.title) FROM Entity e WHERE e.parrent = parent_id)'
}
}
第二种选择是使用Grails定义的
dataSource
bean以及groovy.sql.sql
来执行本机sql语句。请参见示例。非常感谢!我认为定义的数据源在我的场景中可以很好地工作。这种sql的结果是GroovyRowResult的集合(根据您发布的链接中的示例)->所以我只需要在执行之后将它映射到我的域实体中。但是,当这些实体只有4个属性时,它将是简单的。我看到的唯一问题是:我的复杂查询是用HQL编写的(它是动态的等等)->我只需要找到如何将HQL转换为nativeSQL的方法,然后我就可以按照上面描述的方式添加execute。
class MyDomain {
Long parentId
String titleAgg
static mapping = {
titleAgg formula: '(SELECT LISTAGG(e.title) FROM Entity e WHERE e.parrent = parent_id)'
}
}