我想从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,]
...
}
答案 0 :(得分:1)
我创建了一个包含userId,domainName,domainId,dateCreated的新表。每当用户保存/销毁Domain1 |时,都要将工作放入创建/删除此记录中Domain2 | DomainN域实例。
然后你的#34;我需要来自任意域名列表的最新5个实例"变得非常微不足道。
答案 1 :(得分:1)
总的来说,有几种方法可以做到这一点。列举下面几个:
创建第三个表,其中包含两个表中具有相应id字段的公共字段。
使用本机sql并使用嵌套查询或联接或联合查询。
使用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
请参阅this帖子了解相同内容。