Grails Createcriteria用于子查询

时间:2010-02-28 18:27:24

标签: regex grails

如何将createCriteria用于subQuery。 我的HQL是这样的:

def lists = List.executeQuery(“FROM list cl WHERE cl.brand_id in(SELECT b.id FROM Brand b WHERE cl.brand_id = b.id AND b.brand_name rLIKE'^ [0123456789]。*')” )

请告诉我们如何使用Createcriteria写这个?

提前感谢。

2 个答案:

答案 0 :(得分:0)

似乎Hibernate不支持rlike或regexp功能(参见http://opensource.atlassian.com/projects/hibernate/browse/HHH-3404) 但是Grails确实做到了!

为此你需要使用createCriteria(而不是executeQuery) 根据此讨论http://n4.nabble.com/Using-rlike-in-a-gorm-query-td1391934.htmlhttp://jira.codehaus.org/browse/GRAILS-3481,您的解决方案将是:

def c = List.createCriteria(); 
results = c { 
        rlike("name", "^[0123456789].*") 
} 

注意:它可能仅适用于MySQL和Oracle

答案 1 :(得分:0)

在查询域对象的属性时,您需要在条件中使用属性的名称进行阻止。类似的东西:

def criteria = List.createCriteria(); 
def results = criteria {
    brand {
        rlike("name", "^[0123456789].*") 
    }
}

另请参阅Grails GORM criteria docs

中的“查询关联”部分