我正在尝试使用QueryDSL(包括开始,独占结束日期)创建一个时间间隔的查询.
在QueryDSL的documentation中,我发现公共BooleanExpression介于(表达式< T> from,Expression< T>)之间;双方都是独家的,
Get a first < this < second expression
但是它转换为Oracle SQL BETWEEN,它包含在两端(相当于第一个< = this< = second). 像这样的QueryDSL:
[...] person.name.like(n) .and(person.birthdate.between(from,to)) [...]
转换为Oracle SQL,如下所示:
SELECT * FROM PERSON WHERE NAME LIKE n AND BIRTHDATE BETWEEN from AND to;
有谁知道这背后的原因/逻辑?
它只是“腐烂”的文件吗?
很明显,这对我来说不会对我有用.
我是否应该使用更笨重的人
person.name.like(n) .and(person.birthdate.goe(from) .and(person.birthdate.lt(to))
还是有一个干净的解决方案,做我想要的?
解决方法
该文档已于
http://www.querydsl.com/static/querydsl/2.2.0/apidocs/com/mysema/query/types/expr/ComparableExpression.html#between(T,%20T)年前修复过
2.2.0于2011年7月18日发布.我强烈建议您使用4. *或3. *的新版Querydsl.
对于包容性开始,独占结束,您可以编写自己的实用方法:
public static <T> Predicate range(ComparableExpression<T> expr,T from,T to) { return expr.goe(expr).and(expr.lt(to)); }