Grails 获取一组GORM对象,其中每个对象的两个属性具有特定值

Grails 获取一组GORM对象,其中每个对象的两个属性具有特定值,grails,gorm,Grails,Gorm,我有一个GORM对象,它有很多属性 MyGormObject { String prop1; String prop2; String prop3; ... } 我有一个映射列表,其中每个映射都有一个特定的prop1和prop2值。 我想找到所有具有与prop1、prop2映射对匹配的prop1和prop2的MyGormObjects 如果它只是一对,我会尽力匹配我能做到的: static MyGormObject get(String prop1, long

我有一个GORM对象,它有很多属性

MyGormObject {
    String prop1;
    String prop2;
    String prop3;
    ...
}
我有一个映射列表,其中每个映射都有一个特定的prop1和prop2值。 我想找到所有具有与prop1、prop2映射对匹配的prop1和prop2的MyGormObjects

如果它只是一对,我会尽力匹配我能做到的:

static MyGormObject get(String prop1, long prop2) {
    find 'from MyGormObject where prop1=:prop1 and prop2=:prop2',
            [prop1: prop1, prop2: prop2]
}
你知道我怎样才能配得上一对吗


谢谢

我想你应该建立一个动态的标准。大概是这样的:

def m =[
  [key1: 'value1a', key2: 'value2a'], 
  [key1: 'value1b', key2: 'value2b']
]

def results = MyDomain.withCriteria { m ->
  or {
    m.each { v ->
      and {
        eq('key1', v.key1)
        eq('key2', v.key2)
      } // match the pair of values
    }
  } // match any of the pairs
}

以上内容将使任何域类与列表中的任一对匹配。为了匹配列表中的任何对,它必须是or,而且属性也必须包装在and{}中,以便它们作为一对匹配,而不是相互独立

你在找这样的东西吗

def listOfMaps = ...

def results = MyDomain.withCriteria { 
    or {
        listOfMaps.each { map ->
            // if you need to impose a check here
            // to make sure the keys exist, do that.
            // this code assumes they exist...
            def key1 = map.key1
            def key2 = map.key2
            and {
                eq 'key1', key1
                eq 'key2', key2
            }
        }
    }
}

我没有正确地阅读问题,我认为你是对的,抱歉,别担心。我只是担心我完全错过了什么。谢谢你的帮助。(:我认为这行不通。看起来您希望映射(m)作为参数传递给withCriteria闭包。我指的是建议的解决方案中的“MyDomain.withCriteria{m->”。它实际上是一个映射列表。