@Override public Iterable<V> findAll(Iterable<ID> idIterable) { Assert.notNull(idIterable, ID_MUST_NOT_BE_NULL); List<ID> idList = new ArrayList<>(); for (ID id : idIterable) { idList.add(id); } CriteriaBuilder<?> cb = cbf.create(entityManager, getDomainClass()) .where(getIdAttribute()).in(idList); TypedQuery<V> findAllByIdsQuery = evm.applySetting(setting, cb).getQuery(); applyRepositoryMethodMetadata(findAllByIdsQuery); return findAllByIdsQuery.getResultList(); }
@Override public List<V> findAll() { CriteriaBuilder<E> cb = createCriteriaBuilder(); String[] fetches = getFetches(); if (fetches.length != 0) { cb.fetch(fetches); } TypedQuery<V> query; if (viewClass() == null) { query = (TypedQuery<V>) cb.getQuery(); } else { query = applySetting( createSetting(), cb ).getQuery(); } applyQueryHints(query, fetches.length == 0); return query.getResultList(); }
public V findOne(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); CriteriaBuilder<?> cb = cbf.create(entityManager, getDomainClass()) .where(getIdAttribute()).eq(id); TypedQuery<V> findOneQuery = evm.applySetting(setting, cb).getQuery(); applyQueryHints(findOneQuery); return findOneQuery.getSingleResult(); }
public boolean exists(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); TypedQuery<Object> existsQuery = cbf.create(entityManager, Object.class) .from(getDomainClass()) // Empty string because SQLServer can't interpret a number properly when using TOP clause .select("''") .where(idAttributeName).eq(id) .setMaxResults(1) .getQuery(); applyRepositoryMethodMetadata(existsQuery, true); try { return !existsQuery.getResultList().isEmpty(); } catch (NoResultException e) { return false; } }
@Override public boolean exists(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); TypedQuery<Long> existsQuery = cbf.create(entityManager, Long.class) .from(getDomainClass()) .select("COUNT(*)") .where(getIdAttribute()).eq(id) .getQuery(); applyRepositoryMethodMetadata(existsQuery); return existsQuery.getSingleResult() > 0; }
@Override public V findBy(PK pk) { CriteriaBuilder<E> cb = createCriteriaBuilder().where(idAttribute()).eq(pk); String[] fetches = getFetches(); if (fetches.length != 0) { cb.fetch(fetches); } TypedQuery<V> query; if (viewClass() == null) { query = (TypedQuery<V>) cb.getQuery(); } else { query = applySetting( createSetting(), cb ).getQuery(); } applyQueryHints(query, fetches.length == 0); List<V> result = query.getResultList(); return result.isEmpty() ? null : result.get(0); }
public boolean exists(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); TypedQuery<Object> existsQuery = cbf.create(entityManager, Object.class) .from(getDomainClass()) // Empty string because SQLServer can't interpret a number properly when using TOP clause .select("''") .where(idAttributeName).eq(id) .setMaxResults(1) .getQuery(); applyRepositoryMethodMetadata(existsQuery, true); try { return !existsQuery.getResultList().isEmpty(); } catch (NoResultException e) { return false; } }
private Map<String, List<String>> delete(String bucketId, List<String> bucketObjectNames) { if (bucketObjectNames == null || bucketObjectNames.isEmpty()) { return Collections.emptyMap(); } Bucket bucket = em.find(Bucket.class, bucketId, LockModeType.PESSIMISTIC_WRITE); // TODO: check access rights? if (bucket == null) { throw new BucketNotFoundException("Bucket '" + bucketId + "' does not exist!"); } List<BucketObjectVersion> bucketObjectVersions = cbf.create(em, BucketObjectVersion.class) .fetch("storage") .fetch("bucketObject") .where("id.bucketId").eq(bucketId) .where("state").eq(BucketObjectState.CREATED) .where("id.bucketObjectName").in(bucketObjectNames) .getQuery() .setLockMode(LockModeType.PESSIMISTIC_WRITE) .getResultList(); if (bucketObjectVersions.size() == 0) { return Collections.emptyMap(); } return deleteBucketObjectVersions(bucket, bucketObjectVersions, true); }
private void createObject(BucketObject bucketObject) { List<Bucket> results = cbf.create(em, Bucket.class) .fetch("storage") .where("id").eq(bucketObject.getId().getBucketId()) .getQuery() .setLockMode(LockModeType.PESSIMISTIC_WRITE) .getResultList(); if (results.isEmpty()) { throw new BucketNotFoundException("Bucket not found!"); } Bucket bucket = results.get(0); // 1. Persist empty bucket object bucketObject.setBucket(bucket); bucketObject.setState(BucketObjectState.CREATING); bucketObject.setContentVersion(null); bucketObject.setContentVersionUuid(null); em.persist(bucketObject); em.flush(); }
public List<V> findAll(Iterable<ID> idIterable) { Assert.notNull(idIterable, ID_MUST_NOT_BE_NULL); List<ID> idList = new ArrayList<>(); for (ID id : idIterable) { idList.add(id); } CriteriaBuilder<?> cb = cbf.create(entityManager, getDomainClass()) .where(idAttributeName).in(idList); String[] fetches = EMPTY; if (metadata != null && metadata.getEntityGraph() != null && (fetches = metadata.getEntityGraph().attributePaths()).length != 0) { cb.fetch(fetches); } TypedQuery<V> findAllByIdsQuery; Class<V> entityViewClass = metadata == null || metadata.getEntityViewClass() == null ? this.entityViewClass : (Class<V>) metadata.getEntityViewClass(); if (entityViewClass == null) { findAllByIdsQuery = (TypedQuery<V>) cb.getQuery(); } else { findAllByIdsQuery = evm.applySetting(EntityViewSetting.create(entityViewClass), cb).getQuery(); } applyRepositoryMethodMetadata(findAllByIdsQuery, fetches.length == 0); return findAllByIdsQuery.getResultList(); }
@Override public void delete(Account account, String securityGroupName) { try { WeblinkSecurityGroup securityGroup = cbf.create(em, WeblinkSecurityGroup.class) .where("name").eq(securityGroupName) .where("owner.id").eq(account.getId()) .getQuery() .setLockMode(LockModeType.PESSIMISTIC_WRITE) .getSingleResult(); em.remove(securityGroup); em.flush(); } catch (NoResultException ex) { throw new WeblinkSecurityGroupNotFoundException("WeblinkSecurityGroup '" + securityGroupName + "' does not exist!"); } catch (PersistenceException ex) { // TODO: delete all references to the security group or mark this as deleted? throw new WeblinkException("Can not delete weblink security group!", ex); } }
@Override public Iterable<V> findAll(Sort sort) { CriteriaBuilder<E> cb = createCriteriaBuilder(); String[] fetches = getFetches(); if (fetches.length != 0) { cb.fetch(fetches); } TypedQuery<V> query; if (viewClass() == null) { QueryBuilderUtils.applySort(sort, cb); query = (TypedQuery<V>) cb.getQuery(); } else { EntityViewSetting<V, CriteriaBuilder<V>> setting = EntityViewSetting.create(viewClass()); QueryBuilderUtils.applySort(sort, setting); query = applySetting(setting, cb) .getQuery(); } applyQueryHints(query, fetches.length == 0); return query.getResultList(); }
protected TypedQuery<?> createQuery0(CriteriaQuery<?> criteriaQuery, Object[] values) { processSpecification(criteriaQuery, values); com.blazebit.persistence.CriteriaBuilder<?> cb = ((BlazeCriteriaQuery<?>) criteriaQuery).createCriteriaBuilder(getEntityManager()); if (entityViewClass == null) { return cb.getQuery(); } else { EntityViewSetting<?, ?> setting = EntityViewSetting.create(entityViewClass); setting = processSetting(setting, values); return evm.applySetting(setting, cb).getQuery(); } }
public String getNextCode(String weblinkGroupId) { // NOTE: We only do an update here, because we ensure that the weblink group sequence is created at creation time of the weblink group // ReturningResult<Long> result = cbf.update(em, WeblinkGroupSequence.class) // .setExpression("value", "value + 1") // .where("id").eq(weblinkGroupId) // .executeWithReturning("value", Long.class); // // if (result.getUpdateCount() != 1) { // throw new WeblinkException("Updating the weblink group sequence of '" + weblinkGroupId + "' did not result in an update count of 1!"); // } WeblinkGroupSequence seq = cbf.create(em, WeblinkGroupSequence.class) .where("id").eq(weblinkGroupId) .getQuery() .setLockMode(LockModeType.PESSIMISTIC_WRITE) .getSingleResult(); Long newValue = seq.getValue() + 1; seq.setValue(newValue); em.flush(); String code = getStringCodeGenerator(weblinkGroupId).encode(newValue); return code; } }
public V findOne(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); CriteriaBuilder<?> cb = cbf.create(entityManager, getDomainClass()) .where(idAttributeName).eq(id); String[] fetches = EMPTY; if (metadata != null && metadata.getEntityGraph() != null && (fetches = metadata.getEntityGraph().attributePaths()).length != 0) { cb.fetch(fetches); } TypedQuery<V> findOneQuery; Class<V> entityViewClass = metadata == null || metadata.getEntityViewClass() == null ? this.entityViewClass : (Class<V>) metadata.getEntityViewClass(); if (entityViewClass == null) { findOneQuery = (TypedQuery<V>) cb.getQuery(); } else { findOneQuery = evm.applySetting(EntityViewSetting.create(entityViewClass), cb).getQuery(); } applyQueryHints(findOneQuery, fetches.length == 0); try { return findOneQuery.getSingleResult(); } catch (NoResultException e) { return null; } }
protected TypedQuery<?> createQuery0(CriteriaQuery<?> criteriaQuery, Object[] values) { processSpecification(criteriaQuery, values); com.blazebit.persistence.CriteriaBuilder<?> cb = ((BlazeCriteriaQuery<?>) criteriaQuery).createCriteriaBuilder(getEntityManager()); processBlazeSpecification(cb, values); if (entityViewClass == null) { return cb.getQuery(); } else { EntityViewSetting<?, ?> setting = EntityViewSetting.create(entityViewClass); setting = processSetting(setting, values); return evm.applySetting(setting, cb).getQuery(); } }
protected <S extends E> TypedQuery<Long> getCountQuery(Specification<S> spec, Class<S> domainClass) { BlazeCriteriaBuilder builder = BlazeCriteria.get(cbf); BlazeCriteriaQuery<Long> query = builder.createQuery(Long.class); Root<S> root = applySpecificationToCriteria(spec, domainClass, query); if (query.isDistinct()) { query.select(builder.countDistinct(root)); } else { query.select(builder.count(root)); } // Remove all Orders the Specifications might have applied query.orderBy(Collections.<Order> emptyList()); return this.applyRepositoryMethodMetadata(query.createCriteriaBuilder(entityManager).getQuery(), true); }
protected <S extends E> TypedQuery<Long> getCountQuery(Specification<S> spec, Class<S> domainClass) { BlazeCriteriaBuilder builder = BlazeCriteria.get(cbf); BlazeCriteriaQuery<Long> query = builder.createQuery(Long.class); Root<S> root = applySpecificationToCriteria(spec, domainClass, query); if (query.isDistinct()) { query.select(builder.countDistinct(root)); } else { query.select(builder.count(root)); } // Remove all Orders the Specifications might have applied query.orderBy(Collections.<Order> emptyList()); return this.applyRepositoryMethodMetadata(query.createCriteriaBuilder(entityManager).getQuery(), true); }
@Override public List<V> findAll(int start, int max) { CriteriaBuilder<E> cb = createCriteriaBuilder().orderByAsc(idAttribute()); String[] fetches = getFetches(); if (fetches.length != 0) { cb.fetch(fetches); } TypedQuery<V> query; if (viewClass() == null) { query = (TypedQuery<V>) cb.getQuery(); } else { EntityViewSetting<V, PaginatedCriteriaBuilder<V>> setting = EntityViewSetting.create(viewClass(), start, max); query = applySetting(setting, cb) .getQuery(); } applyQueryHints(query, fetches.length == 0); return query.getResultList(); }
@Override public void put(WeblinkSecurityGroup securityGroup) { checkConstraintConfiguration(securityGroup.getConstraintConfigurations()); if (em.contains(securityGroup)) { em.detach(securityGroup); } try { WeblinkSecurityGroup currentSecurityGroup = cbf.create(em, WeblinkSecurityGroup.class) .where("name").eq(securityGroup.getName()) .where("owner.id").eq(securityGroup.getOwner().getId()) .getQuery() .setLockMode(LockModeType.PESSIMISTIC_WRITE) .getSingleResult(); currentSecurityGroup.setName(securityGroup.getName()); currentSecurityGroup.setTags(securityGroup.getTags()); currentSecurityGroup.setConstraintConfigurations(securityGroup.getConstraintConfigurations()); em.flush(); } catch (NoResultException ex) { em.persist(securityGroup); return; } }