从Grails域类中的Map属性查询值

时间:2012-05-14 16:36:20

标签: grails grails-domain-class

我在这个问题中找到了Burt Beckwith提出的解决方案:add user define properties to a domain class并且认为在某些情况下这对我们来说可能是一个可行的选择。在测试中,我有一个带有Map属性的域,如引用的问题中所述。这是一个简化版本(我有更多非地图属性,但它们与此问题无关):

class Space {
    String spaceDescription
    String spaceType
    Map dynForm  

     String toString() {
    return (!spaceType)?id:spaceType + " (" + spaceDescription + ")"
 }  
}

我在dynForm Map中有一些空间保存了一些空格,比如'Test1':'abc'和'Test2':'xyz'。

我正在尝试查询此数据并成功使用HQL过滤执行以下操作:

String className = "Space"
Class clazz = grailsApplication.domainClasses.find { it.clazz.simpleName == className }.clazz

def res = clazz.executeQuery("select distinct space.id, space.spaceDescription from Space as space  where space.dynForm['Test1'] = 'abc'  " )  
log.debug "" +  res

我想知道是否有办法在select语句中从Map dynForm中选择单个项目。有点像这样:

def res = clazz.executeQuery("select distinct space.id, elements(space.dynForm['Test1']) from Space as space  where space.dynForm['Test1'] = 'abc'  " )

我可以像这样选择整个地图:

def res = clazz.executeQuery("select distinct elements(space.dynForm) from Space as space  where space.dynForm['Test1'] = 'abc' " )

但我只想根据字符串idx获取特定实例。

1 个答案:

答案 0 :(得分:0)

如何使用Criteria,但我没有任何sql server,所以我还没有测试过。

def results = Space.createCriteria().list {
    dynForm{
        like('Test1', 'abc')
    }
}