GORM发现所有都不起作用

时间:2014-08-20 08:16:04

标签: grails gorm

A有类产品:

class Product {
    static hasMany = [attributeValues: ProductAttributeValue]

    String productId
    String manufacturer
    BigDecimal price

    static constraints = {
        productId unique: true, blank: false
        manufacturer blank: false
        price min: BigDecimal.ZERO
    }
}

我想查找所有产品,哪个productId包含子字符串'filter'。 我写了下一段代码:

Product.findAll {it.productId.contains(filter)}

但它不起作用。为什么呢?

2 个答案:

答案 0 :(得分:5)

这应该不起作用! 你有两个选择:

1)您使用GORMcriteria query之类的道具HQL技术,如下所示:

Product.findAllByProductIdIlike( "%${filter}%" ) // dyn-finders
Product.withCriteria{ ilike 'productId', "%${filter}%" } // criteria    
Product.findAll{ ilike 'productId', "%${filter}%" } // criteria
Product.findAll( "from Product where productId like '%?%'", [ filter ] ) // hql`

2)或者对grails app的内存(而不是db)中的整个数据集使用过滤 - 不推荐:

Product.list().findAll{ it.productId.contains(filter) }

答案 1 :(得分:0)

你可以使用正则表达式, 试试这个:

def yourProductIsWithFilter = '123filter456'  
def matchingPattern = 'filter'
//def patternToMatch = /\b${matchingPattern}/\b  
//def patternToMatch = /[A-Z_0-9${matchingPattern}/]
def patternToMatch = ~/.${matchingPattern}/

Product.findAll{it.productId =~ patternToMatch }

注意:我还没有测试过代码。 希望它能让你有所了解。 此致