use of javax.persistence.criteria.Selection in project adeptj-modules by AdeptJ.
the class EclipseLinkCrudRepository method findByCriteriaAndMapConstructor.
/**
* {@inheritDoc}
*/
@Override
public <T extends BaseEntity, C> List<C> findByCriteriaAndMapConstructor(ConstructorCriteria<T, C> criteria) {
EntityManager em = this.emf.createEntityManager();
try {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<C> cq = cb.createQuery(criteria.getConstructorClass());
Root<T> root = cq.from(criteria.getEntity());
return em.createQuery(cq.select(cb.construct(criteria.getConstructorClass(), criteria.getSelections().stream().map(root::get).toArray(Selection[]::new))).where(JpaUtil.getPredicates(criteria.getCriteriaAttributes(), cb, root))).getResultList();
} catch (RuntimeException ex) {
LOGGER.error(ex.getMessage(), ex);
throw new PersistenceException(ex.getMessage(), ex);
} finally {
JpaUtil.closeEntityManager(em);
}
}
use of javax.persistence.criteria.Selection in project jbpm by kiegroup.
the class DistincVsJoinPerformanceTest method doJoinQuery.
private long doJoinQuery(EntityManager em, String userId, List<String> groupIds, int total) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<TaskImpl> joinQuery = builder.createQuery(TaskImpl.class);
Root<TaskImpl> taskRoot = joinQuery.from(TaskImpl.class);
Join<TaskImpl, TaskDataImpl> join = taskRoot.join(TaskImpl_.taskData);
Selection select = getTaskSummarySelect(builder, taskRoot);
joinQuery.select(select);
Join<TaskImpl, PeopleAssignmentsImpl> peopleAssign = taskRoot.join(TaskImpl_.peopleAssignments);
ListJoin<PeopleAssignmentsImpl, OrganizationalEntityImpl> busAdmins = peopleAssign.join(PeopleAssignmentsImpl_.businessAdministrators, JoinType.LEFT);
ListJoin<PeopleAssignmentsImpl, OrganizationalEntityImpl> potOwners = peopleAssign.join(PeopleAssignmentsImpl_.potentialOwners, JoinType.LEFT);
ListJoin<PeopleAssignmentsImpl, OrganizationalEntityImpl> stakeHols = peopleAssign.join(PeopleAssignmentsImpl_.taskStakeholders, JoinType.LEFT);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(builder.equal(taskRoot.get(TaskImpl_.taskData).get(TaskDataImpl_.actualOwner).get(UserImpl_.id), userId));
predicates.add(builder.equal(taskRoot.get(TaskImpl_.taskData).get(TaskDataImpl_.createdBy).get(UserImpl_.id), userId));
predicates.add(builder.or(builder.equal(busAdmins.get(OrganizationalEntityImpl_.id), userId), busAdmins.get(OrganizationalEntityImpl_.id).in(groupIds)));
predicates.add(builder.or(builder.equal(potOwners.get(OrganizationalEntityImpl_.id), userId), potOwners.get(OrganizationalEntityImpl_.id).in(groupIds)));
predicates.add(builder.or(builder.equal(stakeHols.get(OrganizationalEntityImpl_.id), userId), stakeHols.get(OrganizationalEntityImpl_.id).in(groupIds)));
if (!predicates.isEmpty()) {
joinQuery.where(builder.or(predicates.toArray(new Predicate[predicates.size()])));
}
return timeQueryExecution(em, joinQuery, null, total);
}
use of javax.persistence.criteria.Selection in project jbpm by kiegroup.
the class TaskSummaryQueryCriteriaUtil method getOrderByExpression.
@Override
protected <T, R> Expression getOrderByExpression(CriteriaQuery<R> query, Class<T> queryType, String orderByListId) {
List<Selection<?>> selections = query.getSelection().getCompoundSelectionItems();
Selection orderBySelection = null;
if (orderByListId.equals(QueryParameterIdentifiers.TASK_ID_LIST)) {
orderBySelection = selections.get(0);
} else if (orderByListId.equals(QueryParameterIdentifiers.TASK_NAME_LIST)) {
orderBySelection = selections.get(1);
} else if (orderByListId.equals(QueryParameterIdentifiers.TASK_STATUS_LIST)) {
orderBySelection = selections.get(4);
} else if (orderByListId.equals(QueryParameterIdentifiers.CREATED_BY_LIST)) {
orderBySelection = selections.get(8);
} else if (orderByListId.equals(QueryParameterIdentifiers.CREATED_ON_LIST)) {
orderBySelection = selections.get(9);
} else if (orderByListId.equals(QueryParameterIdentifiers.PROCESS_INSTANCE_ID_LIST)) {
orderBySelection = selections.get(14);
}
return (Expression<?>) orderBySelection;
}
Aggregations