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

grails - retrieve domain instances by date from seperate tables

我想 return 来自 2 个不同 table 的 5 个最新域实例。我有:

class Domain1 {
...
    Date dateCreated

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

&

class Domain2 {
...
    Date dateCreated

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

我需要 dateCreated 为任何一个用户 最近创建的 5 个,而不管它们来自 table,即如果所有 5 个最近创建的实例来自用户的类型是 Domain1,则查询 returns 5 个 Domain1 实例。我已经查看了各种可用的查询选项,但尚未确定可以满足这些需求的选项(我对 HQL 的了解不多)。用户域与域具有一对多关系:

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

我将创建一个新的 table,其中包含 userId、domainName、domainId、dateCreated。每当一个用户saves/destroys一个Domain1 | 把工作放入creating/deleting这条记录中域名2 | DomainN 域实例。

然后你的 "I need the newest 5 instances from an arbitrary list of domains" 变得很琐碎。

一般来说,可能有几种方法可以做到这一点。下面列出其中的一些:

  1. 创建第三个 table,其中包含来自两个 table 的具有各自 id 字段的公共字段。

  2. 使用原生 sql 并使用嵌套查询或连接或联合查询。

  3. 使用 hql 联合查询。例如,

    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
    

参见 this post。