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)}
但它不起作用。为什么呢?
答案 0 :(得分:5)
这应该不起作用! 你有两个选择:
1)您使用GORM
或criteria 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 }
注意:我还没有测试过代码。 希望它能让你有所了解。 此致