Search code examples
grailsgrails-orm

grails named query returns incorrect data


I have a simple query in a domain class ..

   inventoryItems { String partNumber, String serialReference, Vendor vendor ->

        def c = InventoryMaster.createCriteria()

        def results = c.list {

            if(partNumber) {
                println "part  .. ${partNumber} ..."
                part {
                    eq 'partNumber', partNumber
                }
            }

            if(vendor) {
                println "vendor  .. ${vendor} ... "
               part {
                    eq 'vendor', vendor
                }
            }

            if(serialReference) {
                println "serial reference .. ${serialReference}"
                eq 'serialReference', serialReference
            }

        }

        results

    }

I call this providing 2 params initially (serialReference and vendor) and it correctly returns 2 items .. I refine it by adding a third param (partNumber) and it incorrectly returns 2 items instead of the 1 expected .. I have sql logging switched on , copied the generated stmt and ran it tru the dbconsole where it correctly returned the 1 item expected .. I have no caching switched on that I can see and am running grails 2.3.7 .. Can anyone suggest what i'm doing wrong or what is causing this?

Thanks.


Solution

  • I think you can simplify the query a bit with something like this:

    inventoryItems { String partNumber, String serialReference, Vendor vendor ->
    
        part {
            if(partNumber) {
                println "part  .. ${partNumber} ..."
                eq 'partNumber', partNumber
            }
            if(vendor) {
                println "vendor  .. ${vendor} ... "
                eq 'vendor', vendor
            }
        }
    
    
        if(serialReference) {
            println "serial reference .. ${serialReference}"
            eq 'serialReference', serialReference
        }
    }