【问题标题】:grails - retrieve domain instances by date from seperate tablesgrails - 从单独的表中按日期检索域实例
【发布时间】:2016-03-25 06:12:38
【问题描述】:

我想从 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,]
...
}

【问题讨论】:

    标签: grails hql grails-orm grails-domain-class


    【解决方案1】:

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

    1. 创建第三个表,其中包含公共字段和两个表中各自的 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 相同的帖子。

    【讨论】:

      【解决方案2】:

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

      然后您的“我需要来自任意域列表的最新 5 个实例”变得非常简单。

      【讨论】:

        猜你喜欢
        • 2019-12-30
        • 2020-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 2014-08-02
        相关资源
        最近更新 更多