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" 变得很琐碎。
一般来说,可能有几种方法可以做到这一点。下面列出其中的一些:
创建第三个 table,其中包含来自两个 table 的具有各自 id 字段的公共字段。
使用原生 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 post。
我想 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" 变得很琐碎。
一般来说,可能有几种方法可以做到这一点。下面列出其中的一些:
创建第三个 table,其中包含来自两个 table 的具有各自 id 字段的公共字段。
使用原生 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 post。