protected <T extends Entity> T findWithViews(MetaClass metaClass, Object id, List<View> views) { Object realId = getRealId(id); log.debug("find {} by id={}, views={}", metaClass.getJavaClass().getSimpleName(), realId, views); String pkName = metadata.getTools().getPrimaryKeyName(metaClass); if (pkName == null) throw new IllegalStateException("Cannot determine PK name for entity " + metaClass); Query query = createQuery(String.format("select e from %s e where e.%s = ?1", metaClass.getName(), pkName)); ((QueryImpl) query).setSingleResultExpected(true); query.setParameter(1, realId); for (View view : views) { query.addView(view); } //noinspection unchecked return (T) query.getFirstResult(); }