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

最佳答案

一般而言,可以有几种方法可以做到这一点。列出以下几个:

  • 创建第三个表,其中包含两个表中具有各自id字段的公共(public)字段。
  • 使用本机sql,在那里使用嵌套查询或联接或联合查询。
  • 使用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帖子。

    10-05 22:05