繁体   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