grails 命名查询返回不正确的数据

Posted

技术标签:

【中文标题】grails 命名查询返回不正确的数据【英文标题】:grails named query returns incorrect data 【发布时间】:2014-09-26 13:55:08 【问题描述】:

我在域类中有一个简单的查询..

   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

    

我将其称为最初提供 2 个参数(serialReference 和供应商),它正确返回 2 个项目。我通过添加第三个参数(partNumber)对其进行优化,它不正确返回 2 个项目而不是1 预期 .. 我打开了 sql 日志记录,复制了生成的 stmt 并在 dbconsole 中运行它 正确 返回了预期的 1 项 .. 我有 no 缓存切换我可以看到并且正在运行 grails 2.3.7 .. 任何人都可以建议我做错了什么或者是什么原因造成的?

谢谢。

【问题讨论】:

你为什么从命名查询中调用InventoryMaster.createCriteria() 你说得对,我很愚蠢..对不起,不应该工作这么晚 【参考方案1】:

我认为您可以通过以下方式简化查询:

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
    

【讨论】:

以上是关于grails 命名查询返回不正确的数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 MongoDB 在 Grails 中命名查询的列表方法中排序不区分大小写

Grails 命名查询

Grails 命名查询

Grails 命名查询 - 按关联查找

命名查询中的 Grails GORM 计数函数

JSON的Grails 2.4命名配置不起作用