【问题标题】:Grails CreateCriteria logical OR not working properlyGrails CreateCriteria 逻辑或无法正常工作
【发布时间】:2020-08-15 09:35:31
【问题描述】:

我正在尝试根据“状态”标准对一组对象执行过滤器。

...
or {
    office {
        state {
            'in'('abbrev', filters.stateFilter)
        }
    } 
    state {
        'in'('abbrev', filters.stateFilter)
    }
}

如果 OR 中的 State 过滤器包含在 cide 中,它只会获取与 State 匹配的对象,而不是 Office.State。如果我删除状态过滤器代码,它会正确获取对象的 Office.State。

标准需要获取对象的状态(如果有的话)以及对象的 Office.State(如果有的话)。

我假设它与标准构建器中的一些隐式连接有关?

任何线索将不胜感激!

【问题讨论】:

  • 如果在dataSource 配置中将logSql 设置为true,生成的SQL 将被记录到控制台。这可能会揭示出问题所在。
  • 谢谢!日志显示它正在执行内部连接,这可能是问题所在。

标签: hibernate grails grails-orm createcriteria logical-or


【解决方案1】:

感谢 cmets 中的 Jeff,我能够打开 SQL 日志记录,通过更多的谷歌搜索找到我的问题解决方案。正如我所怀疑的,它正在执行内部连接。这是解决问题所需的代码。

...
createAlias('state', 'state', JoinType.LEFT_OUTER_JOIN)
or {
    office {
        'in'('state.abbrev', filters.stateFilter)
    } 
    'in'('state.abbrev', filters.stateFilter)
}

【讨论】:

    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2023-03-25
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多