@Override public <T> TypedQuery<T> createQuery(CriteriaQuery<T> paramCriteriaQuery) { checkClosed(); return this.createQuery(CriteriaQueryTranslator.translate(paramCriteriaQuery), paramCriteriaQuery.getResultType()); }
/** * Creates a new criteria parsing context. * * @param entityManager the entity manager to use for interacting with the database. * @param queryClass the type of the query. */ TranslationContext(EntityManager entityManager, Class queryClass) { builder = entityManager.getCriteriaBuilder(); query = builder.createQuery(queryClass); // establish single consistent root instance // we need this or erroneous query against distinct table aliases is generated root = query.from(query.getResultType()); }
private boolean isCountCriteriaQuery(CriteriaQuery<?> cq) { return cq.getResultType().toString().contains("java.lang.Long"); }
/** * Find Root of result type * * @param query criteria query * @return the root of result type or null if none */ public static <T> Root<T> findRoot(CriteriaQuery<T> query) { return findRoot(query, query.getResultType()); }
@Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { if (!Number.class.isAssignableFrom(query.getResultType())) { // do not join in count queries for (String path : pathsToFetch){ root.fetch(path, joinType); } } return null; }
private boolean isQueryCreationEligible( EntityGraphBean entityGraphCandidate, MethodInvocation invocation) { Class<?> resultType = null; for (Object argument : invocation.getArguments()) { if (argument instanceof Class) { resultType = (Class<?>) argument; break; } else if (argument instanceof CriteriaQuery) { resultType = ((CriteriaQuery) argument).getResultType(); break; } } return resultType == null || resultType.equals(entityGraphCandidate.getDomainClass()); }
private static <T extends WithId> Root<T> getMainSelection(CriteriaQuery<T> query) { return query.getRoots().stream() .filter(r -> r.getJavaType().isAssignableFrom(query.getResultType())) .map(r -> (Root<T>) r) .filter(r -> !r.isCorrelated()) .findFirst() .orElseThrow(IllegalStateException::new); }
/** * Creates new instance from existing query * * @param em * @param query */ public JpaQueryBuilder(EntityManager em, CriteriaQuery<T> query) { this.criteriaBuilder = em.getCriteriaBuilder(); this.clazz = query.getResultType(); //this.query = query; this.options = EnumSet.noneOf(Logical.class); this.predicateBuilder = new JpaPredicateBuilder(criteriaBuilder, options); this.metamodel = em.getMetamodel(); }
/** * Create a row count CriteriaQuery from a CriteriaQuery * * @param em entity manager * @param criteria source criteria * @return row count CriteriaQuery */ public static <T> CriteriaQuery<Long> countCriteria(EntityManager em, CriteriaQuery<T> criteria) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Long> countCriteria = builder.createQuery(Long.class); copyCriteriaNoSelection(criteria, countCriteria); countCriteria.select(builder.count(findRoot(countCriteria, criteria.getResultType()))); return countCriteria; }
@Override public Slice<SoftwareModule> findAll(final Pageable pageable) { final List<Specification<JpaSoftwareModule>> specList = new ArrayList<>(2); Specification<JpaSoftwareModule> spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); spec = (root, query, cb) -> { if (!query.getResultType().isAssignableFrom(Long.class)) { root.fetch(JpaSoftwareModule_.type); } return cb.conjunction(); }; specList.add(spec); return convertSmPage(findByCriteriaAPI(pageable, specList), pageable); }
@Override public Slice<SoftwareModule> findAll(final Pageable pageable) { final List<Specification<JpaSoftwareModule>> specList = new ArrayList<>(2); Specification<JpaSoftwareModule> spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); spec = (root, query, cb) -> { if (!query.getResultType().isAssignableFrom(Long.class)) { root.fetch(JpaSoftwareModule_.type); } return cb.conjunction(); }; specList.add(spec); return convertSmPage(findByCriteriaAPI(pageable, specList), pageable); }
@Override public Slice<SoftwareModule> findByTextAndType(final Pageable pageable, final String searchText, final Long typeId) { final List<Specification<JpaSoftwareModule>> specList = new ArrayList<>(4); Specification<JpaSoftwareModule> spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); if (!StringUtils.isEmpty(searchText)) { spec = SoftwareModuleSpecification.likeNameOrVersion(searchText); specList.add(spec); } if (null != typeId) { throwExceptionIfSoftwareModuleTypeDoesNotExist(typeId); spec = SoftwareModuleSpecification.equalType(typeId); specList.add(spec); } spec = (root, query, cb) -> { if (!query.getResultType().isAssignableFrom(Long.class)) { root.fetch(JpaSoftwareModule_.type); } return cb.conjunction(); }; specList.add(spec); return convertSmPage(findByCriteriaAPI(pageable, specList), pageable); }
@Override public Slice<SoftwareModule> findByTextAndType(final Pageable pageable, final String searchText, final Long typeId) { final List<Specification<JpaSoftwareModule>> specList = new ArrayList<>(4); Specification<JpaSoftwareModule> spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); if (!StringUtils.isEmpty(searchText)) { spec = SoftwareModuleSpecification.likeNameOrVersion(searchText); specList.add(spec); } if (null != typeId) { throwExceptionIfSoftwareModuleTypeDoesNotExist(typeId); spec = SoftwareModuleSpecification.equalType(typeId); specList.add(spec); } spec = (root, query, cb) -> { if (!query.getResultType().isAssignableFrom(Long.class)) { root.fetch(JpaSoftwareModule_.type); } return cb.conjunction(); }; specList.add(spec); return convertSmPage(findByCriteriaAPI(pageable, specList), pageable); }
/** * * 构建查询条件,子类必须实现addCondition方法来编写查询的逻辑。 * * 子类可以通过addFetch方法控制查询的关联和抓取行为。 * */ @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { if (Long.class != query.getResultType()) { addFetch(root); } List<Predicate> predicates = new ArrayList<Predicate>(); QueryWraper<T> queryWraper = new QueryWraper<T>(root, query, cb, predicates); addCondition(queryWraper); Predicate permissionCondition = getPermissionCondition(queryWraper); if (permissionCondition != null) { queryWraper.addPredicate(permissionCondition); } return cb.and(predicates.toArray(new Predicate[predicates.size()])); }
if (Persistable.class.isAssignableFrom(query.getResultType())) { root.fetch(names[0], joinType); } else { if (Persistable.class.isAssignableFrom(query.getResultType())) { Fetch fetch = root.fetch(names[0], joinTypes[0]); for (int i = 1; i < names.length; i++) {
criteriaQuery.getResultType(), criteriaQuery.getSelection(), new HibernateEntityManagerImplementor.Options() {
@Override @SuppressWarnings("unchecked") public <T> QueryImplementor<T> createQuery(CriteriaQuery<T> criteriaQuery) { checkOpen(); try { return new QuerySqmImpl<>( "<criteria>", getSessionFactory().getQueryEngine().getSemanticQueryProducer().interpret( criteriaQuery ), criteriaQuery.getResultType(), this ); } catch ( RuntimeException e ) { throw exceptionConverter.convert( e ); } }
Class<X> clazz = criteriaQuery.getResultType(); Map<Node, X> map = engine.find(clazz, nodes);
Class<X> resultType = criteriaQuery.getResultType();
Class<X> resultType = criteriaQuery.getResultType();