Java QueryDsl:使用or()和not()为条件生成错误的sql
我在DB中有一个表,其中有列Java QueryDsl:使用or()和not()为条件生成错误的sql,java,postgresql,querydsl,Java,Postgresql,Querydsl,我在DB中有一个表,其中有列date\u start和date\u finish。它是日期范围和date\u start当将而不是合并到子表达式中时,您将反转所有比较(例如=变为和变为 public static BooleanExpression dateRangeIntersection(Range<Date> range, TemporalExpression<Date> pathStart, TemporalExpression<Date> pathF
date\u start
和date\u finish
。它是日期范围和date\u start当将而不是合并到子表达式中时,您将反转所有比较(例如=
变为
和
变为
public static BooleanExpression dateRangeIntersection(Range<Date> range, TemporalExpression<Date> pathStart, TemporalExpression<Date> pathFinish) {
return pathStart.gt(range.getLast()).
or(pathFinish.lt(range.getFirst())).
not();
}
SELECT * FROM table t WHERE NOT (t.date_start > '2016-01-04' OR t.date_finish < '2016-01-01')
SELECT * FROM table t WHERE t.date_start <= '2016-01-04' AND t.date_finish >= '2016-01-01'
NOT (a > b OR c < d)
a <= b AND c >= d
t.date_start <= '2016-01-04' AND t.date_finish >= '2016-01-01'
`2015-10-25` <= '2016-01-04' AND `2016-01-02` >= '2016-01-01'
TRUE AND TRUE