[英]Grails: Problem with nested associations in criteria builder
我對標准構建器有一個令人沮喪的問題。 我有一個應用程序,其中一個用戶有一個日歷,日歷有許多條目。 看起來很簡單,但是當我嘗試獲取給定用戶的日歷條目時,我無法訪問用戶屬性(MissingMethodException)。 這是代碼:
def getEntries(User user) {
def entries = [ClassName].createCriteria().list() {
calendar {
user {
eq("id", user.id)
}
}
}
}
我甚至嘗試過以下變化:
def getEntries(User user) {
def entries = [ClassName].createCriteria().list() {
calendar {
eq("user", user)
}
}
}
這沒有引發異常,但也沒有起作用。
這是域類的相關部分:
class Calendar {
static belongsTo = [user: User]
static hasMany = [entries: Entries]
...
}
class User {
Calendar calendar
...
}
class Entry {
static belongsTo = [calendar: Calendar]
...
}
谷歌搜索時我遇到了2008年初發現的類似問題: http : //jira.codehaus.org/browse/GRAILS-1412
但根據這個鏈接,這個問題早就應該解決了。
我究竟做錯了什么?
我終於找到了錯誤!! 該錯誤與標准構建器完全無關。 在這種情況下的問題是我在范圍內有用戶變量,所以當我嘗試輸入用戶關系時
calendar {
user {
eq("id", user.id)
}
}
Grails認為我想用一個閉包來調用用戶對象/變量。 我可以再次自由地使用標准構建者:-)
感謝您的幫助和建議!
如果您有像問題海報那樣的范圍錯誤,您始終可以執行以下操作。 假設您的范圍中有一個用戶變量,然后使用
def user = User.get(...)
...
calendar {
'user' {
eq("id", user.id)
}
}
代替
def user = User.get(...)
...
calendar {
user {
eq("id", user.id)
}
}
我不確定為什么你的標准不起作用。 我總是遇到一些問題讓他們工作得很好,發現它們比HQL更加繁瑣。
您可以只使用HQL進行查詢,我發現編寫更自然,更易於解析,因為我習慣於將其視為SQL。
這是您在HQL中的查詢:
Entry.executeQuery("from Entry e where e.calendar.user.id = :userId", [userId: theUser.id])
這是一件事
def getEntries(User user) {
def entries = Entries.createCriteria().list() {
calendar {
user {
eq("id", user.id)
}
}
}
}
def entries = Entries.createCriteria().list() {
你為什么寫條目 ? 您的班級名稱是條目 。 所以我會說你的線應該是:
def entries = Entry.createCriteria().list() {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.