2015-07-10 105 views
0

我們有一個User類左連接的Grails標準

class User { 
... 
} 

和其他類:

class Licence { 

    User user 
    Event event 

} 

我們想要做的是左連接(因爲不是每一個用戶,我們有一個條目許可證類)。

我們天真地這樣做:

def a = User.withCriteria { 

    createAlias("Licence", "l", CriteriaSpecification.LEFT_JOIN) 
    eq("id", "l.user.id") 

    if (something == true) 
     isNull("l.id") 
    else 
     isNotNull("l.id") 
} 

但查詢失敗:

could not resolve property Licence of User 

有人可以幫如何做到這一點的查詢?

+0

'User'和'Licence'之間的連接性質是什麼?它是OneToMany還是OneToOne?在我看來,你需要在用戶 – lvojnovic

+0

中使用'static hasOne = [license:License]'或'static hasMany = [licenses:License]',實際上它是一對一的用戶。但我還沒有宣佈hasOne關係,因爲我一直有一個hasOne的問題,當hasOne方可以爲空... – Bernhard

回答

1

問題是如果您沒有外鍵或至少有hasOne,grails不知道User端的連接。如果您有static hasOne = [licence: Licence],您的代碼將按照here的回答進行工作。

+0

不完全正確。在許可證類中,有兩個外鍵:用戶和事件 – Bernhard

+0

我的意思是:您需要在用戶類中擁有外鍵(許可證許可證)或hasOne(許可證)才能使問題標準正常工作 – lvojnovic