簡體   English   中英

Grails休眠標准:如何為一個關聯指定多個條件?

[英]Grails Hibernate Criteria: How do I specify multiple criteria for one association?

編輯1:為了進一步闡明我的問題,我更新了示例代碼,以便只有一個屬性是相關的。

在grails文檔中, “條件”部分的 “查詢關聯”下給出了以下示例:

我們可以通過使用屬性名稱事務作為構建器節點來查詢關聯:

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"
)

僅憑標准如何實現?

為此,請檢查sql查詢日志。 您可以通過在dataSource.groovy中添加logSql = true來記錄查詢,或在yml文件中為Grails 3設置此屬性。

你有沒有嘗試過

Account.createCriteria().list{
    associatedObjectsOfChildClass {
        eq 'someProp', 'value'
        eq 'otherProp', 'otherValue'
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM