我有个很奇怪的问题。我使用以下数据创建了3个实体:
CCB ccb1 = new Ccb(1)
CCB ccb2 = new Ccb(2)
CCB ccb3 = new Ccb(3)其中参数(Long)是对象id。
然后,当想要创建一个带有间隔子句的列表时,它被创建为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()
}
}
)令人难以置信的是,如果我用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"
}发布于 2022-02-08 14:38:09
在运行不同的测试之后,我得出的结论是,在使用H2存储时,它是Grails中的一个bug。对于SQL,它工作得很好。
发布于 2022-02-08 01:32:27
试试这个:
Ccb.createCriteria().list {
between("id", 1l, 5l)
projections {
property('id')
}
}或者:
Ccb.createCriteria().list {
and{
between("id", 1l, 5l)
}
projections {
property('id')
}
}发布于 2022-02-07 11:05:05
您不能按ID流列表并进行筛选吗?
def list = foolist.stream().filter(f -> f.getId() > 0 && f.getId() < 4).collect(Collectors.toList())
https://stackoverflow.com/questions/70992456
复制相似问题