Grails 2.x createCriteria 'or' 不适用于嵌套关联

2023-11-21

似乎在 Grails 2.x 中,如果您有一个域类关联,并且您尝试使用以下命令运行 createCriteriaor在该关系+另一个查询上,or将忽略其他查询并仅使用嵌套关联的结果。我意识到这可能有点令人困惑,所以这里是一个例子:

class Passenger {
    Long id
    Boolean isDriving
}

class Car {
    Long id
    Passenger passenger
    Boolean isMoving

    static constraints = {
        passenger nullable: true
    }
}

和一个测试:

class CarIntegrationTests {
    @Test
    void testCar() {
    Passenger passenger1 = new Passenger(isDriving: true)
    passenger1.save()

    Car car1 = new Car(passenger: passenger1, isMoving: false)
    Car car2 = new Car(isMoving: true)

    car1.save()
    car2.save()

        def queryResults = Car.createCriteria().list() {
            or {
                eq('isMoving', true)// This by itself works

                passenger {// And this by itself works
                    eq('isDriving', true)
                }
            }// But OR'd, it only returns the results of the nested part
        }

        assertEquals 2, queryResults.size() // Returns 1
    }
}

相同的代码在旧版本的 Grails 中可以工作,但现在似乎不起作用——除了运行多个查询之外,有谁知道一个好的解决方法吗?


UPDATE:
Grails 2.x 之后,默认使用 Criteriainner加入,但对于这个特殊情况outer必须使用加入,因为乘客协会不允许跟随or条件如果是inner加入且乘客未设置为汽车。

import org.hibernate.Criteria

def queryResults = Car.createCriteria().list() {
    createAlias('passenger', 'passenger', Criteria.LEFT_JOIN)
    or {
        eq('isMoving', true)
        eq('passenger.isDriving', true)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Grails 2.x createCriteria 'or' 不适用于嵌套关联 的相关文章

随机推荐

  • 在 django admin 中创建新的自定义视图

    抱歉 我还是 django 新手 我想在管理站点上创建与我的模型无关的自定义视图 我已阅读文档 https docs djangoproject com en 2 0 ref contrib admin django contrib adm
  • 获取 numpy 数组中元素对的总和

    我有一个数组 t 4 5 0 7 1 6 8 3 2 9 这只是 0 9 范围内的随机洗牌 我需要计算这个 t2 9 5 7 8 7 14 11 5 11 13 这就是 t2 t 0 t 1 t 1 t 2 t 2 t 3 t 3 t 4
  • 使用 ios 使用 swift 进行本地通知 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我是 swift 的新手 我不知道如何实现本地通知 我尝试了一些代码 但它并不完全有效 所以任何人都可以帮助实现本地通知iOS using swift 在这里我分享一个例子 注册
  • 使用宏将项目附加到数组(C 语言)

    我有一个数组 C语言 应在编译时初始化 例如 DECLARE CMD f1 arg DECLARE CMD f2 arg DECLARE CMD 是从多个文件调用的 我希望对此进行预处理 my func type my funcs f1 f
  • 如何在不使用 的情况下制作带有闪烁光标和可编辑文本的 div?

    我需要制作一个 div 图层 这样当您单击它时 您的光标就会闪烁 您可以插入 删除文本 就像
  • 如何在 C# 中为 Windows-7 设置主显示器

    我相信我需要一个在 SetDisplayConfig 中执行此操作的示例 我的 Windows 7 系统有两个显示器 当我的程序处于一种模式时 第一台显示器必须打开并且是主要显示器 第二台显示器必须关闭 在其他模式下 反之亦然 第一个显示器
  • 如何列出目录中的所有文件?

    这个问题的答案是社区努力 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 如何在Python中列出目录中的所有文件并将它们添加到list os listdir 返回目录中的所有内容 包括两者files and 目录 os path s
  • 使用JQ替换JSON中的下划线

    我正在与吴商务用于检索和存储信息的 API 目前我们的设置设计为使用驼峰式大小写而不是下划线 我在用着jq处理我们的信息 但我很好奇如何使用sub regex tostring 函数用驼峰命名法替换 JSON 中的下划线 这是代码示例 li
  • Xamarin Studio 2 - 最新稳定更新 - 执行任务 Aapt 时出错:源序列为空

    我正在使用 Xamarin Studio 的试用版来完成我的最后一年项目 其中包含一个 Android 应用程序 最初一切都很顺利 但今天在更新到最新的稳定版本后 我遇到了一个错误 如本文标题所述 构建日志如下 构建解决方案 MyActiv
  • 让 tmux windows 继承`activate`d anaconda 环境

    为了方便起见 并考虑到activate 环境非常慢 我想激活一个环境 然后启动一个tmux会议 我想要全新的tmuxwindows 也可以激活环境 我想要不同的tmux会话能够支持不同的 anaconda 环境 我该怎么办 是否存在任何不支
  • 比 double 更精确的浮点数据类型?

    在我的项目中 我必须在矩阵上计算除法 乘法 减法 加法double元素 问题是 当矩阵的大小增加时 我的输出的准确性会受到极大影响 目前我正在使用double对于我认为使用的每个元素8 bytes的记忆力和准确度16 digits与小数点位
  • Selenium 如何点击 50% 在屏幕上和 50% 不在屏幕上的元素?

    有一个 div 元素 其大小的 50 在屏幕上 另外 50 超出屏幕高度并且不可见 无法滚动 我尝试使用 Selenium 进行自动化测试并单击该 div 元素 但有时它有效 有时则无效 为什么 Selenium 不直接点击该 div 的
  • NHIbernate OR 标准查询

    我有以下映射类 Trade ID AccountFrom AccountTo Account ID Company Company ID 现在我无法找到一种方法来选择所有交易 AccountFrom Company ID X OR Acco
  • 我应该使用 django-gunicorn 集成还是 wsgi?

    我正在使用gunicorn django 设置一个网络服务器 有两种部署选项 使用常规 WSGI 或使用gunicorn 的 django 集成 我很想使用后者 因为它简化了配置 但是Django 文档说 If you are using
  • PhoneGap Eclipse 问题 - eglCodecCommon glUtilsParamSize:未知参数错误

    我刚刚开始使用phonegap 并尝试在eclipse 中设置第一个基本的最小项目 我按照以下位置的phonegap文档进行操作http docs phonegap com en edge guide platforms android i
  • MySQL InnoDB 不同数据库之间的外键

    我想知道在 InnoDB 中是否可以MySQL有一个table with 外键引用不同的另一个表database 如果是这样 如何做到这一点 我没有看到任何限制https dev mysql com doc refman 8 0 en cr
  • Django-Celery 正在生产中吗?

    所以我一直在试图弄清楚如何制定计划任务 我找到了 Celery 并且能够制定简单的计划任务 为此 我需要打开命令行并运行celery A proj beat为了任务的发生 这在开发环境中工作得很好 但是当将其投入生产时 这将是一个问题 那么
  • 从 64 位整数秒计数创建 boost::posix_time::ptime 对象

    我有一个 32 位 Linux 系统 在其中我必须记录时间戳为距 1901 01 01 00 00 00 的 UINT32 秒偏移量的数据 计算时间戳对我来说没问题 因为我可以使用 64 位ticks 计数器和ticks per secon
  • 使用 matplotlib 添加自定义刻度

    我想在matplotlib数字 目前 我使用以下命令添加刻度 例如 axis set yticks 0 5 0 6 0 7 0 8 0 9 1 0 我希望能够做到 axis set yticks 1 0 some custom text 所
  • Grails 2.x createCriteria 'or' 不适用于嵌套关联

    似乎在 Grails 2 x 中 如果您有一个域类关联 并且您尝试使用以下命令运行 createCriteriaor在该关系 另一个查询上 or将忽略其他查询并仅使用嵌套关联的结果 我意识到这可能有点令人困惑 所以这里是一个例子 class