grails - 从单独的表中按日期检索域实例

时间:2016-03-25 06:12:39

标签: grails hql gorm grails-domain-class

我想从2个不同的表中返回5个最新的域实例。我有:

class Domain1 {
...
    Date dateCreated

    static mapping = {
        sort "dateCreated"
    }
...
}

&安培;

class Domain2 {
...
    Date dateCreated

    static mapping = {
        sort "dateCreated"
    }
...
}

我需要最近由dateCreated 为任何一个用户创建的5个,无论它们来自哪个表,即如果用户最近创建的所有5个实例都是Domain1类型,那么查询返回5个Domain1实例。我已经查看了各种可用的查询选项,还没有确定哪些可以满足这些需求(我没有看多少HQL)。用户域与域具有一对多的关系:

class User {
...
    static hasMany = [domain1s:Domain1,
                      domain2s:Domain2,]
...
}

2 个答案:

答案 0 :(得分:1)

我创建了一个包含userId,domainName,domainId,dateCreated的新表。每当用户保存/销毁Domain1 |时,都要将工作放入创建/删除此记录中Domain2 | DomainN域实例。

然后你的#34;我需要来自任意域名列表的最新5个实例"变得非常微不足道。

答案 1 :(得分:1)

总的来说,有几种方法可以做到这一点。列举下面几个:

  1. 创建第三个表,其中包含两个表中具有相应id字段的公共字段。

  2. 使用本机sql并使用嵌套查询或联接或联合查询。

  3. 使用hql union查询。例如,

    select * from (
    select
    dp.field1 as field1,dp.field2 as field2
    from DOMAIN1 dd
    where dd.userId = 2
    
    union
    
    select
    dp.field1 as field1,dp.field2 as field2
    from DOMAIN2 dd
    where dd.userId = 2
    ) as final_table order by dateCreated desc limit0,5
    
  4. 请参阅this帖子了解相同内容。