GORM / HQL - LISTAGG

时间:2014-11-06 18:22:19

标签: sql oracle grails hql gorm

在GORM中使用grails(使用grails)我需要将subselect的多个结果组合成一个值。 (此子选择的结果将是连接值,我可以进行搜索/排序等...) 查询被写为HQL。在oracle中有这样的东西 http://www.techonthenet.com/oracle/functions/listagg.php

可以是在HQL中实现的那种(例如GORM)吗?

...
AND (
    SELECT LISTAG(e.title) AS con FROM Entity e
    WHERE Entity.searchKey = TRUE
    AND e.parrent = par
    AND LOWER(e.title) LIKE :search
) > 0
...
ORDER BY con ASC

thansk

1 个答案:

答案 0 :(得分:1)

Hibernate以及位于Hibernate之上的HQL / GORM层并不直接支持Oracle LISTAGG()之类的特定于数据库的功能。但是,有一些方法可以在Grails中使用本机SQL。如果要将连接值添加到其中一个域对象,可以使用GORM的派生属性功能(http://grails.org/doc/latest/guide/GORM.html#derivedProperties)。

这些方面的东西:

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语句。有关示例,请参阅here