簡體   English   中英

Grails:條件構建器中嵌套關聯的問題

[英]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.

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