Pavel Savchyk
Pavel Savchyk

Reputation: 362

GORM findAll doesn't work

A have class Product:

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
    }
}

I want to find all products, which productId contains substring 'filter'. I wrote next code:

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

But it doesn't work. Why?

Upvotes: 1

Views: 806

Answers (2)

injecteer
injecteer

Reputation: 20699

this should't work at all! you have 2 options here:

1) you use propper GORM techniques like criteria query or HQL, the would look like:

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) or use filtering on the whole dataset in grails app's memory (instead of the db) - NOT recommended:

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

Upvotes: 5

Madhu Bose
Madhu Bose

Reputation: 371

You can use regex, Try this :

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 }

Note: I haven't tested the code. Hope it gives you a heads up. Regards

Upvotes: 0

Related Questions