【问题标题】:Grails Createcriteria for subquery用于子查询的 Grails Createcriteria
【发布时间】:2010-02-28 18:27:23
【问题描述】:

如何将 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 编写这个??

提前致谢。

【问题讨论】:

    标签: regex grails


    【解决方案1】:

    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

    【讨论】:

    • 嗨,谢谢法比恩。但是如何将 createCriteria 用于 subQuery 。我的最终 sql 是这样的: 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】:

    在查询域对象的属性时,您需要使用属性名称在条件中创建一个块。比如:

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

    另请参阅Grails GORM criteria docs 中的“查询关联”部分

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多