You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Anylogic中QueryDSL调用and()拼接条件查询返回错误结果问题

问题描述

在AnyLogic模型中创建名为c2d_selfpickup的数据库表,需使用QueryDSL实现根据入参SCid和PVZid查询对应c2d_lm字段值的功能。

表结构参考:c2d_selfpickup表结构

初始编写的查询代码如下:

List <Double> c2dlmList = selectFrom(c2d_selfpickup)
                            .where(c2d_selfpickup.sc_id.goe(SCid)
                            .and( c2d_selfpickup.pvz_id.goe(PVZid) ))
                            .list(c2d_selfpickup.c2d_lm);

测试传入参数:

int SCid = 256151;
int PVZid = 547307;

预期返回仅包含8.0的单元素列表(对应表中第8行匹配记录),实际返回包含7个值的列表:

[2.0, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0]
错误原因

查询条件的方法使用错误:

  • QueryDSL中goe()方法是greater than or equal to的缩写,对应SQL的>=(大于等于)逻辑,用于范围筛选,不是精确等值匹配。
  • 原代码实际执行的筛选逻辑是sc_id >= 传入SCid 且 pvz_id >= 传入PVZid,所有满足两个字段值大于等于入参的记录都会被查出,因此返回了多条不符合预期的结果。
修正方法

精确匹配场景需要使用eq()方法(equal的缩写,对应SQL的=等值判断逻辑),修正后代码:

List <Double> c2dlmList = selectFrom(c2d_selfpickup)
                            .where(c2d_selfpickup.sc_id.eq(SCid)
                            .and( c2d_selfpickup.pvz_id.eq(PVZid) ))
                            .list(c2d_selfpickup.c2d_lm);

内容的提问来源于stack exchange,提问作者dkdelta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:54:25