@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)); }