【问题标题】:GORM createCriteria() "AND" issueGORM createCriteria() "AND" 问题
【发布时间】:2012-07-11 13:39:06
【问题描述】:

2 领域类,人物和属性

class Person {
static hasMany = [attributes : Attribute]    


}


class Attribute{
String key
String value
}

查询 fname:

def c = Person.createCriteria()
def result = c.list{

attributes {
          eq("key", "fname")
          eq("value", "foo")
}   


println result
}

结果: [foo foo ,富吧]

查询 lname:

def c = Person.createCriteria()
def result = c.list{

attributes {
          eq("key", "lname")
          eq("value", "bar")
}   


println result
}

结果: [酒吧酒吧 ,富吧]

查询 lname 或 fname:

def c = Person.createCriteria()
def result = c.list{
or{
attributes {
          eq("key", "fname")
          eq("value", "foo")
}

attributes {
          eq("key", "lname")
          eq("value", "bar")
}
}

println result
}

结果: [foo foo ,富吧 ,吧吧]

但如果我将 OR 更改为 And,我不会得到任何结果:

def c = Person.createCriteria()
def result = c.list{
and{
attributes {
          eq("key", "fname")
          eq("value", "foo")
}

attributes {
          eq("key", "lname")
          eq("value", "bar")
}
}

println result
}

结果: []

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    我为此找到了一个肮脏的解决方法:

     def list1= Person.createCriteria().list { 
                attributes { 
                        eq("key", "fname") 
                        eq("value", "foo") 
                } 
            } 
    def list2= Person.createCriteria().list { 
                attributes { 
                        eq("key", "lname") 
                        eq("value", "bar") 
                } 
            } 
            return list1.intersect(list2) 
    

    Source

    我不会回答这个问题,希望有人会想出更好的东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      相关资源
      最近更新 更多