protected Query createQuery(EntityManager em, LoadContext context, boolean singleResult) {
LoadContext.Query contextQuery = context.getQuery();
RdbmsQueryBuilder queryBuilder = AppBeans.get(RdbmsQueryBuilder.NAME);
queryBuilder.init(
contextQuery == null ? null : contextQuery.getQueryString(),
contextQuery == null ? null : contextQuery.getCondition(),
contextQuery == null ? null : contextQuery.getSort(),
contextQuery == null ? null : contextQuery.getParameters(),
contextQuery == null ? null : contextQuery.getNoConversionParams(),
context.getId(), context.getMetaClass()
);
queryBuilder.setSingleResult(singleResult);
if (!context.getPrevQueries().isEmpty()) {
log.debug("Restrict query by previous results");
queryBuilder.restrictByPreviousResults(userSessionSource.getUserSession().getId(), context.getQueryKey());
}
Query query = queryBuilder.getQuery(em);
if (contextQuery != null) {
if (contextQuery.getFirstResult() != 0)
query.setFirstResult(contextQuery.getFirstResult());
if (contextQuery.getMaxResults() != 0)
query.setMaxResults(contextQuery.getMaxResults());
if (contextQuery.isCacheable()) {
query.setCacheable(contextQuery.isCacheable());
}
}
return query;
}