@SuppressWarnings({"rawtypes", "unchecked"})
  private void injectSubQueries(
      Criteria root, Class<? extends HrBusinessObjectContract> hrBOClass, Map formProps) {
    // create the effective date filter criteria
    Criteria effectiveDateFilter = new Criteria();
    LocalDate fromEffdt =
        TKUtils.formatDateString(TKUtils.getFromDateString((String) formProps.get(EFFECTIVE_DATE)));
    LocalDate toEffdt =
        TKUtils.formatDateString(TKUtils.getToDateString((String) formProps.get(EFFECTIVE_DATE)));
    if (fromEffdt != null) {
      effectiveDateFilter.addGreaterOrEqualThan(EFFECTIVE_DATE, fromEffdt.toDate());
    }
    if (toEffdt != null) {
      effectiveDateFilter.addLessOrEqualThan(EFFECTIVE_DATE, toEffdt.toDate());
    }
    if (fromEffdt == null && toEffdt == null) {
      effectiveDateFilter.addLessOrEqualThan(EFFECTIVE_DATE, LocalDate.now().toDate());
    }

    List<String> businessKeys = new ArrayList<String>();
    try {
      businessKeys =
          (List<String>) hrBOClass.getDeclaredField(BUSINESS_KEYS_VAR_NAME).get(hrBOClass);
    } catch (NoSuchFieldException e) {
      LOG.warn(hrBOClass.getName() + DOES_NOT_CONTAIN_BUSINESS_KEYS_MESSAGE);
    } catch (IllegalAccessException e) {
      LOG.warn(hrBOClass.getName() + DOES_NOT_CONTAIN_BUSINESS_KEYS_MESSAGE);
    }

    // inject the subqueries
    root.addEqualTo(
        EFFECTIVE_DATE,
        OjbSubQueryUtil.getEffectiveDateSubQueryWithFilter(
            hrBOClass, effectiveDateFilter, businessKeys, false));
    root.addEqualTo(
        TIMESTAMP, OjbSubQueryUtil.getTimestampSubQuery(hrBOClass, businessKeys, false));
  }