Wer hat nen besseren Vorschlag für diese Query hier:
Code:
if (filter.getSeminar() == null && filter.getShowAny() == false) {
// Little hack: We don't show anything, so we don't need to query at all
return new ArrayList<>();
}
QueryBuilder<Entry, Integer> qb = this.entries.queryBuilder();
Where entryWhere = qb.where();
// Little hack: Generate first expression as "true" so we don't have to check if we need 'and's
entryWhere.or(entryWhere.eq("id", 5), entryWhere.not().eq("id", 5));
QueryBuilder<Seminar, Integer> seminarQb = this.seminars.queryBuilder();
seminarQb.selectColumns("id");
Where seminarWhere = seminarQb.where();
if (filter.getSeminar() == null) {
int filterNum = 0;
if (filter.getShowCoopPrograms()) {
seminarWhere.eq("type", Seminar.Type.COOPPROGRAM);
filterNum++;
}
if (filter.getShowInternships()) {
seminarWhere.eq("type", Seminar.Type.INTERNSHIPS);
filterNum++;
}
if (filter.getShowSeminars()) {
seminarWhere.eq("type", Seminar.Type.SEMINAR);
filterNum++;
}
seminarWhere.or(filterNum);
entryWhere.and();
entryWhere.in("seminar_id", seminarQb);
}
if (filter.getSeminar() != null) {
entryWhere.and();
entryWhere.eq("seminar_id", filter.getSeminar());
}
if (filter.getStudent() != null) {
entryWhere.and();
entryWhere.eq("student_id", filter.getStudent());
}
return this.entries.query(qb.prepare());