Java源码示例:org.springframework.data.jpa.domain.Specifications

示例1
@Override
public Iterable<T> findAllActive(Iterable<ID> ids) {
	if (ids == null || !ids.iterator().hasNext())
		return Collections.emptyList();

	if (entityInformation.hasCompositeId()) {
		List<T> results = new ArrayList<T>();

		for (ID id : ids)
			results.add(findOneActive(id));

		return results;
	}

	ByIdsSpecification<T> specification = new ByIdsSpecification<T>(entityInformation);
	TypedQuery<T> query = getQuery(Specifications.where(specification).and(notDeleted()), (Sort) null);

	return query.setParameter(specification.parameter, ids).getResultList();
}
 
示例2
/**
 * @name 搜索资源
 * @param resourceType 资源类型
 * @param resourceName 资源名称
 * @param page 分页的页码
 * @param size 每页的数量
 * @return
 * @throws Exception
 */
public Object search(String resourceType,
                     String resourceName,
                     int page,
                     int size) throws Exception {
    addResourcesAuto();
    Sort sort = new Sort(Sort.Direction.DESC, "id");
    PageRequest pageRequest = new PageRequest(page, size, sort);
    Specifications<Resource> conditions = null;
    if (StringUtils.isNotBlank(resourceName)) {
        if (conditions == null)
            conditions = Specifications.where(SpecificationFactory.containsLike("resource_name", resourceName));
        else
            conditions = conditions.and(SpecificationFactory.containsLike("resource_name", resourceName));
    }
    if (StringUtils.isNotBlank(resourceType)) {
        if (conditions == null)
            conditions = Specifications.where(SpecificationFactory.containsLike("resource_type", resourceType));
        else
            conditions = conditions.and(SpecificationFactory.containsLike("resource_type", resourceType));
    }
    Page<Resource> page1 = null;
    if (conditions == null)
        page1 = resourceRepository.findAll(pageRequest);
    else
        page1 = resourceRepository.findAll(conditions, pageRequest);
    return page1;
}
 
示例3
@Transactional(readOnly = true)
public Page<Board> findAll(Pageable pageable, Pagination pagination) {
    if (pagination.getKeyword() == null) {
        return boardRepository.findAll(pageable);
    }

    String keyword = pagination.getKeyword();
    return (pagination.filterMatcher(Pagination.FilterType.ALL)) ?
            boardRepository.findAll(Specifications.where(BoardSpecification.findByAll(keyword)), pageable) :
            boardRepository.findAll(Specifications.where(BoardSpecification.findByFilter(pagination)), pageable);
}
 
示例4
public List<Asset> findAll(Long repositoryId, String path, Boolean deleted, Boolean virtual, Long branchId) {

        logger.debug("Find all assets for repositoryId: {}, path: {}, deleted: {}, virtual: {}, branchId: {}",
                repositoryId, path, deleted, virtual, branchId);

        Specifications<Asset> assetSpecifications = distinct(ifParamNotNull(repositoryIdEquals(repositoryId)))
                .and(ifParamNotNull(pathEquals(path)))
                .and(ifParamNotNull(deletedEquals(deleted)))
                .and(ifParamNotNull(virtualEquals(virtual)))
                .and(ifParamNotNull(branchId(branchId, deleted)));

        List<Asset> all = assetRepository.findAll(assetSpecifications);
        return all;
    }
 
示例5
public Page<T> findAll(Pageable pageable, SearchForm searchForm, User user, AclClassName aclClassName, PermissionName permissionName) {
    Specification<T> securedSpecification = SecuredSpecifications.getSpecification(user, aclClassName, permissionName);
    Specification<T> searchFormSpecification = SearchFormSpecifications.getSpecification(searchForm);
    Specification<T> specification = AndSpecifications.getSpecification(searchFormSpecification, securedSpecification);

    return (Page) (null == pageable ? new PageImpl(this.findAll()) : this.findAll(Specifications.where(specification), pageable));
}
 
示例6
public List<T> findAll(SearchForm searchForm, User user, AclClassName aclClassName, PermissionName permissionName) {
    Specification<T> securedSpecification = SecuredSpecifications.getSpecification(user, aclClassName, permissionName);
    Specification<T> searchFormSpecification = SearchFormSpecifications.getSpecification(searchForm);
    Specification<T> specification = AndSpecifications.getSpecification(searchFormSpecification, securedSpecification);

    return this.findAll(Specifications.where(specification));
}
 
示例7
@Override
public ChartIndex getChartIndex(Index index, ChartType type,
		ChartHistoSize histoSize, ChartHistoMovingAverage histoAverage,
		ChartHistoTimeSpan histoPeriod, Integer intradayWidth,
		Integer intradayHeight) {
	
	log.debug("getChartIndex("+index+", "+type+", "+histoSize+", "+histoAverage+", "+histoPeriod+", "+intradayWidth+", "+intradayHeight+")");
	
	Specification<ChartIndex> spec = new ChartSpecifications<ChartIndex>().typeEquals(type);
	
	if(type.equals(ChartType.HISTO)){
		if(histoSize != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartIndex>().sizeEquals(histoSize));
		}
		if(histoAverage != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartIndex>().histoMovingAverageEquals(histoAverage));
		}
		if(histoPeriod != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartIndex>().histoTimeSpanEquals(histoPeriod));
		}
	}
	else{
		if(intradayWidth != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartIndex>().intradayWidthEquals(intradayWidth));
		}
		if(intradayHeight != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartIndex>().intradayHeightEquals(intradayHeight));
		}
	}
	
	spec = Specifications.where(spec).and(new ChartSpecifications<ChartIndex>().indexEquals(index));
	log.debug("DB CALL");

	return chartIndexRepository.findAll(spec,new Sort(Direction.DESC,"id")).stream().findFirst().orElse(null);
}
 
示例8
@Override
public Page<StockProduct> get(String indexId, String exchangeId, MarketId marketId, String startWith, Specification<StockProduct> spec, Pageable pageable, boolean validResults) {
	if(!StringUtils.isEmpty(indexId)){
		Index index = indexRepository.findOne(indexId);
		if(index == null){
			throw new NoResultException("No result found for the index ID "+indexId+" !");
		}
		return stockProductRepository.findByIndices(index, pageable);
	}

	if(!StringUtils.isEmpty(startWith)){
		spec = Specifications.where(spec).and(new ProductSpecifications<StockProduct>().nameStartsWith(startWith));
	}
	
	if(marketId != null){
		Market market = marketRepository.findOne(marketId);
		if(market == null){
			throw new NoResultException("No result found for the market ID "+marketId+" !");
		}
		spec = Specifications.where(spec).and(new ProductSpecifications<StockProduct>().marketIdEquals(marketId));
	}
	
	if(!StringUtils.isEmpty(exchangeId)){
		spec = Specifications.where(spec).and(new ProductSpecifications<StockProduct>().exchangeIdEquals(exchangeId));
	}
	
	spec = Specifications.where(spec)
			.and(new ProductSpecifications<StockProduct>().nameNotNull())
			.and(new ProductSpecifications<StockProduct>().exchangeNotNull());

	if(validResults){
		spec = Specifications.where(spec)
				.and(new ProductSpecifications<StockProduct>().currencyNotNull())
				.and(new ProductSpecifications<StockProduct>().hasAPrice());
	}
	
	return stockProductRepository.findAll(spec, pageable);
}
 
示例9
@Override
public ChartStock getChartStock(StockProduct index, ChartType type,
		ChartHistoSize histoSize, ChartHistoMovingAverage histoAverage,
		ChartHistoTimeSpan histoPeriod, Integer intradayWidth,
		Integer intradayHeight) {
	
	Specification<ChartStock> spec = new ChartSpecifications<ChartStock>().typeEquals(type);
	
	if(type.equals(ChartType.HISTO)){
		if(histoSize != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartStock>().sizeEquals(histoSize));
		}
		if(histoAverage != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartStock>().histoMovingAverageEquals(histoAverage));
		}
		if(histoPeriod != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartStock>().histoTimeSpanEquals(histoPeriod));
		}
	}
	else{
		if(intradayWidth != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartStock>().intradayWidthEquals(intradayWidth));
		}
		if(intradayHeight != null){
			spec = Specifications.where(spec).and(new ChartSpecifications<ChartStock>().intradayHeightEquals(intradayHeight));
		}
	}
	
	spec = Specifications.where(spec).and(new ChartSpecifications<ChartStock>().indexEquals(index));
	return chartStockRepository.findAll(spec,new Sort(Direction.DESC,"id")).stream().findFirst().orElse(null);
}
 
示例10
@Override
public long countByExample(final T entity, final SearchParameters sp) {
    Validate.notNull(entity, "The entity cannot be null");
    if (sp.hasNamedQuery()) {
        return getNamedQueryUtil().numberByNamedQuery(sp).intValue();
    }
    Specifications<T> spec = Specifications.where(byExampleSpecification.byExampleOnEntity(entity, sp));
    spec = RangeSpecification.andRangeIfSet(spec, sp.getRanges());
    spec = PropertySelectorSpecification.andPropertySelectorIfSet(spec, sp);
    return super.count(spec);
}
 
示例11
@Override
public Page<T> findByExample(final T example, final List<Range<?, ?>> ranges, final Pageable pageable) {
    SearchParameters searchParameter = new SearchParameters();
    Specifications<T> spec = Specifications.where(byExampleSpecification.byExampleOnEntity(example,
            searchParameter));
    spec = RangeSpecification.andRangeIfSet(spec, ranges);
    spec = PropertySelectorSpecification.andPropertySelectorIfSet(spec, searchParameter);
    return findAll(spec, pageable);
}
 
示例12
@Override
public Page<T> findByExample(final T example, final Pageable pageable) {
    SearchParameters searchParameter = new SearchParameters();
    Specifications<T> spec = Specifications.where(byExampleSpecification.byExampleOnEntity(example,
            searchParameter));
    spec = RangeSpecification.andRangeIfSet(spec, searchParameter.getRanges());
    spec = PropertySelectorSpecification.andPropertySelectorIfSet(spec, searchParameter);
    return findAll(spec, pageable);
}
 
示例13
@Override
public List<T> findByExample(final T entity, final SearchParameters searchParameter) {
    Assert.notNull(searchParameter, "Search parameters required");
    if (searchParameter.hasNamedQuery()) {
        return getNamedQueryUtil().findByNamedQuery(searchParameter);
    }
    Specifications<T> spec = Specifications.where(byExampleSpecification.byExampleOnEntity(entity,
            searchParameter));
    spec = RangeSpecification.andRangeIfSet(spec, searchParameter.getRanges());
    spec = PropertySelectorSpecification.andPropertySelectorIfSet(spec, searchParameter);
    return findAll(spec);
}
 
示例14
@Override
public Optional<T> findOneByExample(final T entity, final SearchParameters searchParameter) {
    Assert.notNull(searchParameter, "Search parameters required");
    Specifications<T> spec = Specifications.where(byExampleSpecification.byExampleOnEntity(entity,
            searchParameter));
    spec = RangeSpecification.andRangeIfSet(spec, searchParameter.getRanges());
    spec = PropertySelectorSpecification.andPropertySelectorIfSet(spec, searchParameter);
    return Optional.ofNullable(super.findOne(spec));
}
 
示例15
public static <E,D extends Comparable<? super D>> Specifications<E> andRangeIfSet(Specifications<E> specifications, final List<Range<?, ?>> ranges) {
    for (Range<?, ?> r : ranges) {
        if (r.isSet()) {
            Range<E, D> range = (Range<E, D>) r;
            specifications = specifications.and(toSpecification(range));
        }
    }
    return specifications;
}
 
示例16
@Override
public Page<E> findByExampleWithRange(ExampleNode<E> exampleNode, List<Range<E>> ranges, Pageable pageable) {
    Specification<E> exampleSpecification = new ExampleSpecification<>(exampleNode);
    Specification<E> rangesSpecification = new RangeSpecification<>(ranges);
    return findAll(Specifications.where(exampleSpecification).and(rangesSpecification), pageable);
}
 
示例17
public JpaDynamicSpecificationBuilder() {
    this.specification = Specifications.where(null);
}
 
示例18
public JpaDynamicSpecificationBuilder and(final Iterable<SearchFilter> searchFilters) {
    for (SearchFilter filter : searchFilters)
        this.specification = Specifications.where(this.specification).and(bySearchFilter(filter));
    return this;
}
 
示例19
public JpaDynamicSpecificationBuilder and(final Specification customSpecification) {
    this.specification = Specifications.where(this.specification).and(customSpecification);
    return this;
}
 
示例20
public JpaDynamicSpecificationBuilder and(final Collection<Specification> customSpecifications) {
    for (Specification specification : customSpecifications)
        this.specification = Specifications.where(this.specification).and(specification);
    return this;
}
 
示例21
public JpaDynamicSpecificationBuilder or(final Iterable<SearchFilter> searchFilters) {
    for (SearchFilter filter : searchFilters)
        this.specification = Specifications.where(this.specification).or(bySearchFilter(filter));
    return this;
}
 
示例22
public JpaDynamicSpecificationBuilder or(final Specification customSpecification) {
    this.specification = Specifications.where(this.specification).or(customSpecification);
    return this;
}
 
示例23
public JpaDynamicSpecificationBuilder or(final Collection<Specification> customSpecifications) {
    for (Specification specification : customSpecifications)
        this.specification = Specifications.where(this.specification).or(specification);
    return this;
}
 
示例24
@Override
@SuppressWarnings("unchecked")
protected <S extends T> TypedQuery<Long> getCountQuery(Specification<S> spec,
    Class<S> domainClass) {
  return super.getCountQuery(((Specifications<S>)aclJpaSpec()).and(spec), domainClass);
}
 
示例25
@Override
@SuppressWarnings("unchecked")
protected <S extends T> TypedQuery<S> getQuery(Specification<S> spec, Class<S> domainClass,
      Sort sort) {
  return super.getQuery(((Specifications<S>) aclJpaSpec()).and(spec), domainClass, sort);
}
 
示例26
private Specifications<T> aclJpaSpec() {
  Specification<T> spec = jpaSpecProvider.jpaSpecFor(getDomainClass());
  logger.debug("Using ACL JPA specification for objects '{}': {}",
      getDomainClass().getSimpleName(), spec);
  return where(spec);
}
 
示例27
@Override
public T findOneActive(ID id) {
	return super.findOne(
			Specifications.where(new ByIdSpecification<T, ID>(entityInformation, id)).and(notDeleted()));
}
 
示例28
private static final <T> Specification<T> notDeleted() {
	return Specifications.where(new DeletedIsNull<T>()).or(new DeletedTimeGreatherThanNow<T>());
}
 
示例29
public Page<T> findAll(Pageable pageable, User user, AclClassName aclClassName, PermissionName permissionName) {
    Specification<T> securedSpecification = SecuredSpecifications.getSpecification(user, aclClassName, permissionName);

    return (Page) (null == pageable ? new PageImpl(this.findAll()) : this.findAll(Specifications.where(securedSpecification), pageable));
}
 
示例30
public List<T> findAll(User user, AclClassName aclClassName, PermissionName permissionName) {
    Specification<T> securedSpecification = SecuredSpecifications.getSpecification(user, aclClassName, permissionName);

    return this.findAll(Specifications.where(securedSpecification));
}