【发布时间】:2025-12-25 22:15:17
【问题描述】:
编辑 1:为了进一步澄清我的问题,我更新了我的示例代码,以便只有一个属性是相关的。
在 grails 文档中,在查询关联下给出了以下示例 in the Criteria section:
我们可以通过使用属性名称事务作为构建器节点来查询 [...] 关联 [s]:
def c = Account.createCriteria()
def now = new Date()
def results = c.list {
transactions {
between('date', now - 10, now)
}
}
上面的代码将找到在过去 10 天内执行过交易的所有 Account 实例 [...]。
这一切都很好,但我如何对关联进行更复杂的查询?我的意思是,不是每次我想说
查询至少有一个满足我条件的关联对象的所有域对象,
而是
查询至少有一个满足我的条件的关联对象并且至少有一个满足另一种条件的关联对象的所有域对象。
这是我试图用来解决后一种情况的标准。它不起作用。
new DetachedCriteria(ParentDomainClass).build{
associatedObjectsOfChildClass {
eq 'someProp', 'value'
}
associatedObjectsOfChildClass {
eq 'someProp', 'otherValue'
}
}.list()
当我执行这段代码时,只考虑了一个关联标准。我认为同一个关联不允许有多个子查询。但如果是这样的话,我该如何进一步限制呢?
以下代码产生了预期的结果,但并未完全在数据库级别实现。
new DetachedCriteria(ParentDomainClass).build{
associatedObjectsOfChildClass {
eq 'someProp', 'value'
}
}.list().intersect(new DetachedCriteria(ParentDomainClass).build{
associatedObjectsOfChildClass {
eq 'someProp', 'other_value'
}}.list())
这是原生 MySQL 中的一个解决方案:
select * from parent_object
where id in(
select parent_id from child_object
where some_prop = "value"
)
and id in (
select parent_id from child_object
where some_prop = "other_value"
)
如何仅使用标准来实现这一目标?
【问题讨论】:
标签: hibernate grails grails-orm criteria detachedcriteria