@Override public <T> T findByName(String weblinkGroupName, String prefix, Integer limit, String marker, EntityViewSetting<T, ? extends QueryBuilder<T,?>> setting) { if (limit == null) { limit = 1000; } else if (limit > 1000) { throw new IllegalArgumentException("Limit may not exceed 1000!"); } try { CriteriaBuilder<WeblinkGroup> cb = cbf.create(em, WeblinkGroup.class) .where("id").eq(weblinkGroupName); if (prefix != null && !prefix.isEmpty()) { cb.where("links.id.name").like().value(prefix.replaceAll("%", "\\%") + "%").escape('\\'); } if (marker != null && !marker.isEmpty()) { cb.where("links.id.name").gt(marker); } // TODO: implement constraint and marker in query and also for passing into entity views setting.addOptionalParameter("prefix", prefix); setting.addOptionalParameter("constraint", limit); setting.addOptionalParameter("marker", marker); cb.setMaxResults(limit); return evm.applySetting(setting, cb).getSingleResult(); } catch (NoResultException ex) { return null; } }
cb.where("objects.id.name").like().value(prefix.replaceAll("%", "\\%") + "%").escape('\\');