0

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、foo bar]

lnameのクエリ:

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

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


println result
}

結果:[bar bar、foo bar]

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、foo bar、bar bar]

しかし、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
}

結果: []

4

1 に答える 1

0

私はこれに対する汚い回避策を見つけました:

 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) 

ソース

私はこの質問に答えないままにしておきます、うまくいけば誰かがもっと良いものを思い付くでしょう

于 2012-07-11T21:39:27.463 に答える