Example usage for org.hibernate.criterion Restrictions between

List of usage examples for org.hibernate.criterion Restrictions between

Introduction

In this page you can find the example usage for org.hibernate.criterion Restrictions between.

Prototype

public static Criterion between(String propertyName, Object low, Object high) 

Source Link

Document

Apply a "between" constraint to the named property

Usage

From source file:org.photovault.imginfo.QueryFuzzyTimeCriteria.java

License:Open Source License

/**
 * Describe <code>setupQuery</code> method here.
 *
 * @param crit a <code>Criteria</code> value
 *///from  www. j  a  v a 2s. c om
public final void setupQuery(final Criteria crit) {
    log.debug("Entry: SetupQuery");

    if (date == null) {
        log.warn("null query date");
        return;
    }

    switch (strictness) {
    case INCLUDE_CERTAIN:
        log.debug("INCLUDE_CERTAIN");
        /* Only certain results must be included, so the whole
        possible time period of object must be inside the accuracy
        limits.  */
        /*
        crit.addGreaterOrEqualThan( "subdate("+dateField.getName()
           + ", " + accuracyField.getName() + ")",
           date.getMinDate() );
        crit.addLessOrEqualThan( "adddate("+dateField.getName()
         +", " + accuracyField.getName() + ")",
         date.getMaxDate() );
        */
        String gtclauseCertain = "{fn TIMESTAMPADD(SQL_TSI_SECOND, CAST( -3600*24*{alias}."
                + accuracyField.getColumnName() + " AS INT)" + ", {alias}." + dateField.getColumnName()
                + ")} >= ?";
        crit.add(Restrictions.sqlRestriction(gtclauseCertain, date.getMinDate(), Hibernate.TIMESTAMP));
        String ltclauseCertain = "{fn TIMESTAMPADD(SQL_TSI_SECOND, CAST( 3600*24*{alias}."
                + accuracyField.getColumnName() + " AS INT)" + ", {alias}." + dateField.getColumnName()
                + ")} <= ?";
        crit.add(Restrictions.sqlRestriction(ltclauseCertain, date.getMaxDate(), Hibernate.TIMESTAMP));
        break;
    case INCLUDE_PROBABLE:
        log.debug("INCLUDE_PROBABLE");
        crit.add(Restrictions.between(dateField.getName(), date.getMinDate(), date.getMaxDate()));
        crit.add(Restrictions.le(accuracyField.getName(), new Double(date.getAccuracy())));
        break;

    case INCLUDE_POSSIBLE:
        /*
         * Include photos whose time range intersects with the query range
         */
        log.debug("INCLUDE_POSSIBLE");
        String gtclause = "{fn TIMESTAMPADD(SQL_TSI_SECOND, CAST( 3600*24*{alias}."
                + accuracyField.getColumnName() + " AS INT)" + ", {alias}." + dateField.getColumnName()
                + ")} >= ?";
        crit.add(Restrictions.sqlRestriction(gtclause, date.getMinDate(), Hibernate.TIMESTAMP));
        log.debug(gtclause + " >= " + date.getMinDate());
        String ltclause = "{fn TIMESTAMPADD(SQL_TSI_SECOND, CAST( -3600*24*{alias}."
                + accuracyField.getColumnName() + " AS INT)" + ", {alias}." + dateField.getColumnName()
                + ")} <= ?";
        crit.add(Restrictions.sqlRestriction(ltclause, date.getMaxDate(), Hibernate.TIMESTAMP));
        log.debug(ltclause + " <= " + date.getMaxDate());
        break;
    default:
        log.error("Illegal value for strictness: " + strictness);

    }

    log.debug("Exit: SetupQuery");
}

From source file:org.photovault.imginfo.QueryRangeCriteria.java

License:Open Source License

public void setupQuery(Criteria crit) {
    if (lower != null && upper != null) {
        crit.add(Restrictions.between(field.getName(), lower, upper));
    } else if (lower != null) {
        crit.add(Restrictions.ge(field.getName(), lower));
    } else if (upper != null) {
        crit.add(Restrictions.le(field.getName(), upper));
    }/*from  w  ww.  ja v a 2s . co m*/
}

From source file:org.projectforge.business.fibu.AuftragDao.java

License:Open Source License

private List<AuftragDO> getList(final BaseSearchFilter filter, final boolean checkAccess) {
    final AuftragFilter myFilter;
    if (filter instanceof AuftragFilter) {
        myFilter = (AuftragFilter) filter;
    } else {/*from w  ww  .ja  v  a  2 s  .  c o m*/
        myFilter = new AuftragFilter(filter);
    }
    final QueryFilter queryFilter = new QueryFilter(myFilter);
    Boolean vollstaendigFakturiert = null;
    if (myFilter.isShowBeauftragtNochNichtVollstaendigFakturiert() == true) {
        queryFilter.add(Restrictions.not(Restrictions.in("auftragsStatus",
                new AuftragsStatus[] { AuftragsStatus.ABGELEHNT, AuftragsStatus.ERSETZT, AuftragsStatus.GELEGT,
                        AuftragsStatus.GROB_KALKULATION, AuftragsStatus.IN_ERSTELLUNG })));
        vollstaendigFakturiert = false;
    } else if (myFilter.isShowNochNichtVollstaendigFakturiert() == true) {
        queryFilter.add(Restrictions.not(Restrictions.in("auftragsStatus",
                new AuftragsStatus[] { AuftragsStatus.ABGELEHNT, AuftragsStatus.ERSETZT })));
        vollstaendigFakturiert = false;
    } else if (myFilter.isShowVollstaendigFakturiert() == true) {
        vollstaendigFakturiert = true;
    } else if (myFilter.isShowAbgelehnt() == true) {
        queryFilter.add(Restrictions.eq("auftragsStatus", AuftragsStatus.ABGELEHNT));
    } else if (myFilter.isShowAbgeschlossenNichtFakturiert() == true) {
        queryFilter.createAlias("positionen", "position")
                .createAlias("paymentSchedules", "paymentSchedule", Criteria.FULL_JOIN).add(
                        Restrictions.or(
                                Restrictions.or(Restrictions.eq("auftragsStatus", AuftragsStatus.ABGESCHLOSSEN),
                                        Restrictions.eq("position.status",
                                                AuftragsPositionsStatus.ABGESCHLOSSEN)),
                                Restrictions.eq("paymentSchedule.reached", true)));
        vollstaendigFakturiert = false;
    } else if (myFilter.isShowAkquise() == true) {
        queryFilter.add(Restrictions.in("auftragsStatus", new AuftragsStatus[] { AuftragsStatus.GELEGT,
                AuftragsStatus.IN_ERSTELLUNG, AuftragsStatus.GROB_KALKULATION }));
    } else if (myFilter.isShowBeauftragt() == true) {
        queryFilter.add(Restrictions.in("auftragsStatus", new AuftragsStatus[] { AuftragsStatus.BEAUFTRAGT,
                AuftragsStatus.LOI, AuftragsStatus.ESKALATION }));
    } else if (myFilter.isShowErsetzt() == true) {
        queryFilter.add(Restrictions.eq("auftragsStatus", AuftragsStatus.ERSETZT));
    }
    if (myFilter.getYear() > 1900) {
        final Calendar cal = DateHelper.getUTCCalendar();
        cal.set(Calendar.YEAR, myFilter.getYear());
        java.sql.Date lo = null;
        java.sql.Date hi = null;
        cal.set(Calendar.DAY_OF_YEAR, 1);
        lo = new java.sql.Date(cal.getTimeInMillis());
        final int lastDayOfYear = cal.getActualMaximum(Calendar.DAY_OF_YEAR);
        cal.set(Calendar.DAY_OF_YEAR, lastDayOfYear);
        hi = new java.sql.Date(cal.getTimeInMillis());
        queryFilter.add(Restrictions.between("angebotsDatum", lo, hi));
    }
    queryFilter.addOrder(Order.desc("nummer"));
    final List<AuftragDO> list;
    if (checkAccess == true) {
        list = getList(queryFilter);
    } else {
        list = internalGetList(queryFilter);
    }
    if (vollstaendigFakturiert != null) {
        final Boolean invoiced = vollstaendigFakturiert;
        CollectionUtils.filter(list, new Predicate() {
            @Override
            public boolean evaluate(final Object object) {
                final AuftragDO auftrag = (AuftragDO) object;
                final boolean orderIsCompletelyInvoiced = auftrag.isVollstaendigFakturiert();
                if (HibernateUtils.getDialect() != DatabaseDialect.HSQL
                        && myFilter.isShowAbgeschlossenNichtFakturiert() == true) {
                    // if order is completed and not all positions are completely invoiced
                    if (auftrag.getAuftragsStatus() == AuftragsStatus.ABGESCHLOSSEN
                            && orderIsCompletelyInvoiced == false) {
                        return true;
                    }
                    // if order is completed and not completely invoiced
                    if (auftrag.getPositionen() != null) {
                        for (final AuftragsPositionDO pos : auftrag.getPositionen()) {
                            if (pos.isAbgeschlossenUndNichtVollstaendigFakturiert() == true) {
                                return true;
                            }
                        }
                    }
                    if (auftrag.getPaymentSchedules() != null) {
                        for (final PaymentScheduleDO schedule : auftrag.getPaymentSchedules()) {
                            if (schedule.isReached() == true && schedule.isVollstaendigFakturiert() == false) {
                                return true;
                            }
                        }
                    }
                    return false;
                }
                return orderIsCompletelyInvoiced == invoiced;
            }
        });
    }
    if (myFilter.getAuftragsPositionsArt() != null) {
        final AuftragFilter fil = myFilter;
        CollectionUtils.filter(list, new Predicate() {
            @Override
            public boolean evaluate(final Object object) {
                final AuftragDO auftrag = (AuftragDO) object;
                boolean match = false;
                if (fil.getAuftragsPositionsArt() != null) {
                    if (CollectionUtils.isNotEmpty(auftrag.getPositionen()) == true) {
                        for (final AuftragsPositionDO position : auftrag.getPositionen()) {
                            if (fil.getAuftragsPositionsArt() == position.getArt()) {
                                match = true;
                                break;
                            }
                        }
                    }
                }
                return match;
            }
        });
    }
    return list;
}

From source file:org.projectforge.business.fibu.EingangsrechnungDao.java

License:Open Source License

@Override
public List<EingangsrechnungDO> getList(final BaseSearchFilter filter) {
    final RechnungFilter myFilter;
    if (filter instanceof RechnungFilter) {
        myFilter = (RechnungFilter) filter;
    } else {//from w  w w  .  j a va2 s . c om
        myFilter = new RechnungFilter(filter);
    }
    final QueryFilter queryFilter = new QueryFilter(myFilter);
    if (myFilter.getFromDate() != null || myFilter.getToDate() != null) {
        if (myFilter.getFromDate() != null && myFilter.getToDate() != null) {
            queryFilter.add(Restrictions.between("datum", myFilter.getFromDate(), myFilter.getToDate()));
        } else if (myFilter.getFromDate() != null) {
            queryFilter.add(Restrictions.ge("datum", myFilter.getFromDate()));
        } else if (myFilter.getToDate() != null) {
            queryFilter.add(Restrictions.le("datum", myFilter.getToDate()));
        }
    } else {
        queryFilter.setYearAndMonth("datum", myFilter.getYear(), myFilter.getMonth());
    }
    queryFilter.addOrder(Order.desc("datum"));
    queryFilter.addOrder(Order.desc("kreditor"));
    final List<EingangsrechnungDO> list = getList(queryFilter);
    if (myFilter.isShowAll() == true || myFilter.isDeleted() == true) {
        return list;
    }
    final List<EingangsrechnungDO> result = new ArrayList<EingangsrechnungDO>();
    for (final EingangsrechnungDO rechnung : list) {
        if (myFilter.isShowUnbezahlt() == true) {
            if (rechnung.isBezahlt() == false) {
                result.add(rechnung);
            }
        } else if (myFilter.isShowBezahlt() == true) {
            if (rechnung.isBezahlt() == true) {
                result.add(rechnung);
            }
        } else if (myFilter.isShowUeberFaellig() == true) {
            if (rechnung.isUeberfaellig() == true) {
                result.add(rechnung);
            }
        } else {
            log.debug("Unknown filter setting (probably caused by serialize/de-serialize problems): "
                    + myFilter.listType);
        }
    }
    return result;
}

From source file:org.projectforge.business.fibu.kost.BuchungssatzDao.java

License:Open Source License

@Override
public List<BuchungssatzDO> getList(final BaseSearchFilter filter) {
    accessChecker.checkIsLoggedInUserMemberOfGroup(ProjectForgeGroup.FINANCE_GROUP,
            ProjectForgeGroup.CONTROLLING_GROUP);
    final BuchungssatzFilter myFilter;
    if (filter instanceof BuchungssatzFilter) {
        myFilter = (BuchungssatzFilter) filter;
    } else {/* w  w  w  . j  av a 2  s .c o m*/
        myFilter = new BuchungssatzFilter(filter);
    }
    final QueryFilter queryFilter = new QueryFilter(filter);
    if (validateTimeperiod(myFilter) == false) {
        throw new UserException("fibu.buchungssatz.error.invalidTimeperiod");
    }
    if (myFilter.getFromMonth() < 0) {
        // Kein Von-Monat gesetzt.
        queryFilter.add(Restrictions.eq("year", myFilter.getFromYear()));
        queryFilter.add(Restrictions.between("month", 0, 11));
    } else if (myFilter.getToYear() > 0) {
        if (myFilter.getFromYear() == myFilter.getToYear()) {
            queryFilter.add(Restrictions.eq("year", myFilter.getFromYear()));
            queryFilter.add(Restrictions.between("month", myFilter.getFromMonth(), myFilter.getToMonth()));
        } else {
            // between but different years
            queryFilter.add(Restrictions.disjunction()
                    .add(Restrictions.and(Restrictions.eq("year", myFilter.getFromYear()),
                            Restrictions.ge("month", myFilter.getFromMonth())))
                    .add(Restrictions.and(Restrictions.eq("year", myFilter.getToYear()),
                            Restrictions.le("month", myFilter.getToMonth())))
                    .add(Restrictions.and(Restrictions.gt("year", myFilter.getFromYear()),
                            Restrictions.lt("year", myFilter.getToYear()))));
        }
    } else {
        // Nur Von-Monat gesetzt.
        queryFilter.add(Restrictions.eq("year", myFilter.getFromYear()));
        queryFilter.add(Restrictions.eq("month", myFilter.getFromMonth()));
    }
    queryFilter.addOrder(Order.asc("year")).addOrder(Order.asc("month")).addOrder(Order.asc("satznr"));
    final List<BuchungssatzDO> list = getList(queryFilter);
    return list;
}

From source file:org.projectforge.business.fibu.RechnungDao.java

License:Open Source License

@Override
public List<RechnungDO> getList(final BaseSearchFilter filter) {
    final RechnungFilter myFilter;
    if (filter instanceof RechnungFilter) {
        myFilter = (RechnungFilter) filter;
    } else {//from w w w  .  ja  va2 s  .co  m
        myFilter = new RechnungFilter(filter);
    }
    final QueryFilter queryFilter = new QueryFilter(myFilter);
    if (myFilter.getFromDate() != null || myFilter.getToDate() != null) {
        if (myFilter.getFromDate() != null && myFilter.getToDate() != null) {
            queryFilter.add(Restrictions.between("datum", myFilter.getFromDate(), myFilter.getToDate()));
        } else if (myFilter.getFromDate() != null) {
            queryFilter.add(Restrictions.ge("datum", myFilter.getFromDate()));
        } else if (myFilter.getToDate() != null) {
            queryFilter.add(Restrictions.le("datum", myFilter.getToDate()));
        }
    } else {
        queryFilter.setYearAndMonth("datum", myFilter.getYear(), myFilter.getMonth());
    }
    queryFilter.addOrder(Order.desc("datum"));
    queryFilter.addOrder(Order.desc("nummer"));
    if (myFilter.isShowKostZuweisungStatus() == true) {
        queryFilter.setFetchMode("positionen.kostZuweisungen", FetchMode.JOIN);
    }
    final List<RechnungDO> list = getList(queryFilter);
    if (myFilter.isShowAll() == true || myFilter.isDeleted() == true) {
        return list;
    }
    final List<RechnungDO> result = new ArrayList<RechnungDO>();
    for (final RechnungDO rechnung : list) {
        if (myFilter.isShowUnbezahlt() == true) {
            if (rechnung.isBezahlt() == false) {
                result.add(rechnung);
            }
        } else if (myFilter.isShowBezahlt() == true) {
            if (rechnung.isBezahlt() == true) {
                result.add(rechnung);
            }
        } else if (myFilter.isShowUeberFaellig() == true) {
            if (rechnung.isUeberfaellig() == true) {
                result.add(rechnung);
            }
        } else {
            log.error("Unknown filter setting: " + myFilter.listType);
            break;
        }
    }
    return result;
}

From source file:org.projectforge.business.humanresources.HRPlanningDao.java

License:Open Source License

public QueryFilter buildQueryFilter(final HRPlanningFilter filter) {
    final QueryFilter queryFilter = new QueryFilter(filter);
    if (filter.getUserId() != null) {
        final PFUserDO user = new PFUserDO();
        user.setId(filter.getUserId());//from  ww w .  j  a  va  2  s .com
        queryFilter.add(Restrictions.eq("user", user));
    }
    if (filter.getStartTime() != null && filter.getStopTime() != null) {
        queryFilter.add(Restrictions.between("week", filter.getStartTime(), filter.getStopTime()));
    } else if (filter.getStartTime() != null) {
        queryFilter.add(Restrictions.ge("week", filter.getStartTime()));
    } else if (filter.getStopTime() != null) {
        queryFilter.add(Restrictions.le("week", filter.getStopTime()));
    }
    if (filter.getProjektId() != null) {
        queryFilter.add(Restrictions.eq("projekt.id", filter.getProjektId()));
    }
    queryFilter.addOrder(Order.desc("week"));
    if (log.isDebugEnabled() == true) {
        log.debug(ToStringBuilder.reflectionToString(filter));
    }
    return queryFilter;
}

From source file:org.projectforge.business.humanresources.HRPlanningEntryDao.java

License:Open Source License

public QueryFilter buildQueryFilter(final HRPlanningFilter filter) {
    final QueryFilter queryFilter = new QueryFilter(filter);
    queryFilter.createAlias("planning", "p").createAlias("p.user", "u");
    if (filter.getUserId() != null) {
        final PFUserDO user = new PFUserDO();
        user.setId(filter.getUserId());/* ww  w .  jav  a2  s . co  m*/
        queryFilter.add(Restrictions.eq("p.user", user));
    }
    if (filter.getStartTime() != null && filter.getStopTime() != null) {
        queryFilter.add(Restrictions.between("p.week", filter.getStartTime(), filter.getStopTime()));
    } else if (filter.getStartTime() != null) {
        queryFilter.add(Restrictions.ge("p.week", filter.getStartTime()));
    } else if (filter.getStopTime() != null) {
        queryFilter.add(Restrictions.le("p.week", filter.getStopTime()));
    }
    if (filter.getProjektId() != null) {
        queryFilter.add(Restrictions.eq("projekt.id", filter.getProjektId()));
    }
    queryFilter.addOrder(Order.desc("p.week")).addOrder(Order.asc("u.firstname"));
    if (log.isDebugEnabled() == true) {
        log.debug(ToStringBuilder.reflectionToString(filter));
    }
    return queryFilter;
}

From source file:org.projectforge.business.teamcal.event.TeamEventDao.java

License:Open Source License

/**
 * The time period of the filter will be extended by one day. This is needed due to all day events which are stored in
 * UTC. The additional events in the result list not matching the time period have to be removed by caller!
 *
 * @param filter/*from   ww w.  j  a  v  a2  s . c o  m*/
 * @return
 */
private QueryFilter buildQueryFilter(final TeamEventFilter filter) {
    final QueryFilter queryFilter = new QueryFilter(filter);
    final Collection<Integer> cals = filter.getTeamCals();
    if (CollectionUtils.isNotEmpty(cals) == true) {
        queryFilter.add(Restrictions.in("calendar.id", cals));
    } else if (filter.getTeamCalId() != null) {
        queryFilter.add(Restrictions.eq("calendar.id", filter.getTeamCalId()));
    }
    // Following period extension is needed due to all day events which are stored in UTC. The additional events in the result list not
    // matching the time period have to be removed by caller!
    Date startDate = filter.getStartDate();
    if (startDate != null) {
        startDate = new Date(startDate.getTime() - ONE_DAY);
    }
    Date endDate = filter.getEndDate();
    if (endDate != null) {
        endDate = new Date(endDate.getTime() + ONE_DAY);
    }
    // limit events to load to chosen date view.
    if (startDate != null && endDate != null) {
        if (filter.isOnlyRecurrence() == false) {
            queryFilter.add(Restrictions.or(
                    (Restrictions.or(Restrictions.between("startDate", startDate, endDate),
                            Restrictions.between("endDate", startDate, endDate))),
                    // get events whose duration overlap with chosen duration.
                    (Restrictions.and(Restrictions.le("startDate", startDate),
                            Restrictions.ge("endDate", endDate)))));
        } else {
            queryFilter.add(
                    // "startDate" < endDate && ("recurrenceUntil" == null ||"recurrenceUntil" > startDate)
                    (Restrictions.and(Restrictions.lt("startDate", endDate),
                            Restrictions.or(Restrictions.isNull("recurrenceUntil"),
                                    Restrictions.gt("recurrenceUntil", startDate)))));
        }
    } else if (startDate != null) {
        if (filter.isOnlyRecurrence() == false) {
            queryFilter.add(Restrictions.ge("startDate", startDate));
        } else {
            // This branch is reached for subscriptions and calendar downloads.
            queryFilter.add(
                    // "recurrenceUntil" == null ||"recurrenceUntil" > startDate
                    Restrictions.or(Restrictions.isNull("recurrenceUntil"),
                            Restrictions.gt("recurrenceUntil", startDate)));
        }
    } else if (endDate != null) {
        queryFilter.add(Restrictions.le("startDate", endDate));
    }
    queryFilter.addOrder(Order.desc("startDate"));
    if (log.isDebugEnabled() == true) {
        log.debug(ToStringBuilder.reflectionToString(filter));
    }
    return queryFilter;
}

From source file:org.projectforge.core.BaseDao.java

License:Open Source License

@SuppressWarnings("unchecked")
private void getHistoryEntries(final Session session, final BaseSearchFilter filter, final Set<Integer> idSet,
        final Class<?> clazz, final boolean searchStringInHistory) {
    if (log.isDebugEnabled() == true) {
        log.debug("Searching in " + clazz);
    }//from  www.  ja v a 2  s . c  om
    // First get all history entries matching the filter and the given class.
    final String className = ClassUtils.getShortClassName(clazz);
    if (searchStringInHistory == true) {
        final StringBuffer buf = new StringBuffer();
        buf.append("(+className:").append(className);
        if (filter.getStartTimeOfModification() != null || filter.getStopTimeOfModification() != null) {
            final DateFormat df = new SimpleDateFormat(DateFormats.LUCENE_TIMESTAMP_MINUTE);
            df.setTimeZone(DateHelper.UTC);
            buf.append(" +timestamp:[");
            if (filter.getStartTimeOfModification() != null) {
                buf.append(df.format(filter.getStartTimeOfModification()));
            } else {
                buf.append("000000000000");
            }
            buf.append(" TO ");
            if (filter.getStopTimeOfModification() != null) {
                buf.append(df.format(filter.getStopTimeOfModification()));
            } else {
                buf.append("999999999999");
            }
            buf.append("]");
        }
        if (filter.getModifiedByUserId() != null) {
            buf.append(" +userName:").append(filter.getModifiedByUserId());
        }
        buf.append(") AND (");
        final String searchString = buf.toString() + modifySearchString(filter.getSearchString()) + ")";
        try {
            final FullTextSession fullTextSession = Search.getFullTextSession(getSession());
            final org.apache.lucene.search.Query query = createFullTextQuery(HISTORY_SEARCH_FIELDS, null,
                    searchString);
            if (query == null) {
                // An error occured:
                return;
            }
            final FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(query, HistoryEntry.class);
            fullTextQuery.setCacheable(true);
            fullTextQuery.setCacheRegion("historyItemCache");
            fullTextQuery.setProjection("entityId");
            final List<Object[]> result = fullTextQuery.list();
            if (result != null && result.size() > 0) {
                for (final Object[] oa : result) {
                    idSet.add((Integer) oa[0]);
                }
            }
        } catch (final Exception ex) {
            final String errorMsg = "Lucene error message: " + ex.getMessage() + " (for "
                    + this.getClass().getSimpleName() + ": " + searchString + ").";
            filter.setErrorMessage(errorMsg);
            log.info(errorMsg);
        }
    } else {
        final Criteria criteria = session.createCriteria(HistoryEntry.class);
        setCacheRegion(criteria);
        criteria.add(Restrictions.eq("className", className));
        if (filter.getStartTimeOfModification() != null && filter.getStopTimeOfModification() != null) {
            criteria.add(Restrictions.between("timestamp", filter.getStartTimeOfModification(),
                    filter.getStopTimeOfModification()));
        } else if (filter.getStartTimeOfModification() != null) {
            criteria.add(Restrictions.ge("timestamp", filter.getStartTimeOfModification()));
        } else if (filter.getStopTimeOfModification() != null) {
            criteria.add(Restrictions.le("timestamp", filter.getStopTimeOfModification()));
        }
        if (filter.getModifiedByUserId() != null) {
            criteria.add(Restrictions.eq("userName", filter.getModifiedByUserId().toString()));
        }
        criteria.setCacheable(true);
        criteria.setCacheRegion("historyItemCache");
        criteria.setProjection(Projections.property("entityId"));
        final List<Integer> idList = criteria.list();
        if (idList != null && idList.size() > 0) {
            for (final Integer id : idList) {
                idSet.add(id);
            }
        }
    }
}