createdCriteria中的Between不起作用



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

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

其中参数(Long(是对象id。

然后,当想要创建一个带有between子句的列表时,它的创建大小为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()
}
}
)

现在列表返回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"
}

试试这个:

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

或:

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

您不能流式传输列表并按ID进行筛选吗?

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

在运行了不同的测试后,我得出结论,在使用H2存储时,这是Grails中的一个错误。使用SQL可以很好地工作。

相关内容

  • 没有找到相关文章

最新更新