Predicate withDate = new BooleanBuilder(item.date.isNotNull())
.and(item.date.between(startDate, endDate));
Predicate withoutDate = new BooleanBuilder(item.date.isNull())
.and(item.creationDate.between(startDate, endDate));
Predicate combined = new BooleanBuilder(withDate)
.or(withoutDate);