在 createdCriteria 之间不起作用

Between in createdCriteria not works

我有一个很奇怪的问题。我使用以下数据创建了 3 个实体:

CCB ccb1 = new Ccb(1)
CCB ccb2 = new Ccb(2)
CCB ccb3 = new Ccb(3)

其中参数(Long)为对象id。

然后,当想用 between 子句创建一个列表时,它是用 size = 0 创建的:

    ConcurrentLinkedQueue<Long> ccbIds = new ConcurrentLinkedQueue(
            Ccb.createCriteria().list {
                between("id", 1, 5)
                projections {
                    id()
                }
            }
    )

我已经尝试过这个替代方案,但它也不起作用:

    ConcurrentLinkedQueue<Long> ccbIds = new ConcurrentLinkedQueue(
            Ccb.createCriteria().list {
                between("id", "1", "5")
                projections {
                    id()
                }
            }
    )

令人难以置信的是,如果我将 between 替换为 eq:

    ConcurrentLinkedQueue<Long> ccbIds = new ConcurrentLinkedQueue(
            Ccb.createCriteria().list {
                eq("id", 2)
                projections {
                    id()
                }
            }
    )

现在列表 returns 我是 ID 为 2 的元素! 我不明白错误在哪里。

谢谢!

编辑:

DataSource.groovy的配置:

    dataSource {
        dbCreate = "create-drop"
        driverClassName = "org.h2.Driver"
        dialect = "org.hibernate.dialect.H2Dialect"
        url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
    }

您不能流式传输列表并按 ID 过滤吗?

def list = foolist.stream().filter(f -> f.getId() > 0 && f.getId() < 4).collect(Collectors.toList())

试试这个:

        Ccb.createCriteria().list {
            between("id", 1l, 5l)
            projections {
                property('id')
            }
        }

或:

        Ccb.createCriteria().list {
            and{
                between("id", 1l, 5l)
            }
            projections {
                property('id')
            }
        }

经过运行不同的测试,我得出的结论是使用H2存储时Grails中的一个bug。使用 SQL 它工作正常。