final List<Predicate> predicates = new ArrayList<>();
if (id != null) {
predicates.add(Predicates.equal(ID.getField(), id));
predicates.add(Predicates.in(DEVICE_IDS.getField(), deviceIds.toArray(new String[deviceIds.size()])));
predicates.add(Predicates.in(NETWORK_IDS.getField(), networkIds.toArray(new Long[networkIds.size()])));
predicates.add(Predicates.in(DEVICE_TYPE_IDS.getField(), deviceTypeIds.toArray(new Long[deviceTypeIds.size()])));
String searchableField = entityClass.equals(DeviceCommand.class) ? COMMAND.getField() : NOTIFICATION.getField();
predicates.add(Predicates.equal(IS_UPDATED.getField(), returnUpdated));
String searchableFieldSt = returnUpdated ? LAST_UPDATED.getField() : TIMESTAMP.getField();
predicates.add(Predicates.greaterThan(searchableFieldSt, timestampSt.getTime()));
String searchableFieldEnd = returnUpdated ? LAST_UPDATED.getField() : TIMESTAMP.getField();
predicates.add(Predicates.lessThan(searchableFieldEnd, timestampEnd.getTime()));
predicates.add(Predicates.equal(STATUS.getField(), status));