我在数据库中有两列用于日期:
我正在使用范围查询来给出结果。我的查询:
Query startDateQuery = queryBuilder.range().onField("eventsSet.startDate").above(java.sql.Date.valueOf(startDate))
.createQuery();
Query endDateQuery = queryBuilder.range().onField("eventsSet.endDate").below(java.sql.Date.valueOf())
.createQuery();
queryBuilder.bool().must(startDateQuery).should(endDateQuery).createQuery();
它没有给出正确的结果。
我也想返回重叠日期。例如: startDate = 2020-04-07和endDate = 2020-04-14
它应该返回具有该范围的记录以及重叠日期,例如具有startDate = 2020-04-01和endDate = 2020-04-15的记录。
如何在Hibernate搜索中获取它?
答案 0 :(得分:1)
查询中有两个问题:
must
和should
。它们不是同一件事。
基本上:
queryBuilder.bool().should(subquery1).should(subquery2).createQuery();
的意思是“ subquery1 OR subquery2”。queryBuilder.bool().must(subquery1).must(subquery2).createQuery();
的意思是“ subquery1 AND subquery2”。queryBuilder.bool().must(subquery1).must(queryBuilder.bool().should(subquery2).should(subquery3).createQuery()).createQuery();
的意思是“ subquery1 AND(subquery2 OR subquery3)”。interval1StartDate <= interval2EndDate AND interval2StartDate <= interval1EndDate