Replace NoCountPagingRepository by interface with dedicated findAllWithoutCount (#1146)
* Replace NoCountPagingRepository by enhanced BaseRepository Signed-off-by: Alexander Dobler <alexander.dobler3@bosch.io> * Add missed withoutcount call in distributionsettype find all Signed-off-by: Alexander Dobler <alexander.dobler3@bosch.io> * Add missing overrides to NoCountRepository implementation Signed-off-by: Alexander Dobler <alexander.dobler3@bosch.io> * Remove need of repository by referencing base class directly in configuration Signed-off-by: Alexander Dobler <alexander.dobler3@bosch.io>
This commit is contained in:
@@ -29,7 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
@NoRepositoryBean
|
@NoRepositoryBean
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
public interface BaseEntityRepository<T extends AbstractJpaTenantAwareBaseEntity, I extends Serializable>
|
public interface BaseEntityRepository<T extends AbstractJpaTenantAwareBaseEntity, I extends Serializable>
|
||||||
extends PagingAndSortingRepository<T, I> {
|
extends PagingAndSortingRepository<T, I>, NoCountSliceRepository<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves an {@link BaseEntity} by its id.
|
* Retrieves an {@link BaseEntity} by its id.
|
||||||
|
|||||||
@@ -100,8 +100,6 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
|||||||
|
|
||||||
private final ActionRepository actionRepository;
|
private final ActionRepository actionRepository;
|
||||||
|
|
||||||
private final NoCountPagingRepository criteriaNoCountDao;
|
|
||||||
|
|
||||||
private final EventPublisherHolder eventPublisherHolder;
|
private final EventPublisherHolder eventPublisherHolder;
|
||||||
|
|
||||||
private final TenantAware tenantAware;
|
private final TenantAware tenantAware;
|
||||||
@@ -122,8 +120,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
|||||||
final DistributionSetTypeManagement distributionSetTypeManagement, final QuotaManagement quotaManagement,
|
final DistributionSetTypeManagement distributionSetTypeManagement, final QuotaManagement quotaManagement,
|
||||||
final DistributionSetMetadataRepository distributionSetMetadataRepository,
|
final DistributionSetMetadataRepository distributionSetMetadataRepository,
|
||||||
final TargetFilterQueryRepository targetFilterQueryRepository, final ActionRepository actionRepository,
|
final TargetFilterQueryRepository targetFilterQueryRepository, final ActionRepository actionRepository,
|
||||||
final NoCountPagingRepository criteriaNoCountDao, final EventPublisherHolder eventPublisherHolder,
|
final EventPublisherHolder eventPublisherHolder, final TenantAware tenantAware,
|
||||||
final TenantAware tenantAware, final VirtualPropertyReplacer virtualPropertyReplacer,
|
final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||||
final SoftwareModuleRepository softwareModuleRepository,
|
final SoftwareModuleRepository softwareModuleRepository,
|
||||||
final DistributionSetTagRepository distributionSetTagRepository,
|
final DistributionSetTagRepository distributionSetTagRepository,
|
||||||
final AfterTransactionCommitExecutor afterCommit, final Database database) {
|
final AfterTransactionCommitExecutor afterCommit, final Database database) {
|
||||||
@@ -136,7 +134,6 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
|||||||
this.distributionSetMetadataRepository = distributionSetMetadataRepository;
|
this.distributionSetMetadataRepository = distributionSetMetadataRepository;
|
||||||
this.targetFilterQueryRepository = targetFilterQueryRepository;
|
this.targetFilterQueryRepository = targetFilterQueryRepository;
|
||||||
this.actionRepository = actionRepository;
|
this.actionRepository = actionRepository;
|
||||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
|
||||||
this.eventPublisherHolder = eventPublisherHolder;
|
this.eventPublisherHolder = eventPublisherHolder;
|
||||||
this.tenantAware = tenantAware;
|
this.tenantAware = tenantAware;
|
||||||
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
||||||
@@ -793,8 +790,9 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Slice<DistributionSet> findAll(final Pageable pageable) {
|
public Slice<DistributionSet> findAll(final Pageable pageable) {
|
||||||
return convertDsPage(criteriaNoCountDao.findAll(DistributionSetSpecification.isDeleted(false), pageable,
|
return convertDsPage(
|
||||||
JpaDistributionSet.class), pageable);
|
distributionSetRepository.findAllWithoutCount(DistributionSetSpecification.isDeleted(false), pageable),
|
||||||
|
pageable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -55,18 +55,14 @@ public class JpaDistributionSetTagManagement implements DistributionSetTagManage
|
|||||||
|
|
||||||
private final VirtualPropertyReplacer virtualPropertyReplacer;
|
private final VirtualPropertyReplacer virtualPropertyReplacer;
|
||||||
|
|
||||||
private final NoCountPagingRepository criteriaNoCountDao;
|
|
||||||
|
|
||||||
private final Database database;
|
private final Database database;
|
||||||
|
|
||||||
JpaDistributionSetTagManagement(final DistributionSetTagRepository distributionSetTagRepository,
|
JpaDistributionSetTagManagement(final DistributionSetTagRepository distributionSetTagRepository,
|
||||||
final DistributionSetRepository distributionSetRepository,
|
final DistributionSetRepository distributionSetRepository,
|
||||||
final VirtualPropertyReplacer virtualPropertyReplacer, final NoCountPagingRepository criteriaNoCountDao,
|
final VirtualPropertyReplacer virtualPropertyReplacer, final Database database) {
|
||||||
final Database database) {
|
|
||||||
this.distributionSetTagRepository = distributionSetTagRepository;
|
this.distributionSetTagRepository = distributionSetTagRepository;
|
||||||
this.distributionSetRepository = distributionSetRepository;
|
this.distributionSetRepository = distributionSetRepository;
|
||||||
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
||||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
|
||||||
this.database = database;
|
this.database = database;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +125,7 @@ public class JpaDistributionSetTagManagement implements DistributionSetTagManage
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Slice<DistributionSetTag> findAll(final Pageable pageable) {
|
public Slice<DistributionSetTag> findAll(final Pageable pageable) {
|
||||||
return convertDsPage(criteriaNoCountDao.findAll(pageable, JpaDistributionSetTag.class), pageable);
|
return convertDsPage(distributionSetTagRepository.findAllWithoutCount(pageable), pageable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -68,7 +68,6 @@ public class JpaDistributionSetTypeManagement implements DistributionSetTypeMana
|
|||||||
|
|
||||||
private final VirtualPropertyReplacer virtualPropertyReplacer;
|
private final VirtualPropertyReplacer virtualPropertyReplacer;
|
||||||
|
|
||||||
private final NoCountPagingRepository criteriaNoCountDao;
|
|
||||||
private final Database database;
|
private final Database database;
|
||||||
|
|
||||||
private final QuotaManagement quotaManagement;
|
private final QuotaManagement quotaManagement;
|
||||||
@@ -76,13 +75,12 @@ public class JpaDistributionSetTypeManagement implements DistributionSetTypeMana
|
|||||||
JpaDistributionSetTypeManagement(final DistributionSetTypeRepository distributionSetTypeRepository,
|
JpaDistributionSetTypeManagement(final DistributionSetTypeRepository distributionSetTypeRepository,
|
||||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||||
final DistributionSetRepository distributionSetRepository,
|
final DistributionSetRepository distributionSetRepository,
|
||||||
final VirtualPropertyReplacer virtualPropertyReplacer, final NoCountPagingRepository criteriaNoCountDao,
|
final VirtualPropertyReplacer virtualPropertyReplacer, final Database database,
|
||||||
final Database database, final QuotaManagement quotaManagement) {
|
final QuotaManagement quotaManagement) {
|
||||||
this.distributionSetTypeRepository = distributionSetTypeRepository;
|
this.distributionSetTypeRepository = distributionSetTypeRepository;
|
||||||
this.softwareModuleTypeRepository = softwareModuleTypeRepository;
|
this.softwareModuleTypeRepository = softwareModuleTypeRepository;
|
||||||
this.distributionSetRepository = distributionSetRepository;
|
this.distributionSetRepository = distributionSetRepository;
|
||||||
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
||||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
|
||||||
this.database = database;
|
this.database = database;
|
||||||
this.quotaManagement = quotaManagement;
|
this.quotaManagement = quotaManagement;
|
||||||
}
|
}
|
||||||
@@ -234,8 +232,8 @@ public class JpaDistributionSetTypeManagement implements DistributionSetTypeMana
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Slice<DistributionSetType> findAll(final Pageable pageable) {
|
public Slice<DistributionSetType> findAll(final Pageable pageable) {
|
||||||
return convertPage(criteriaNoCountDao.findAll(DistributionSetTypeSpecification.isDeleted(false), pageable,
|
return convertPage(distributionSetTypeRepository
|
||||||
JpaDistributionSetType.class), pageable);
|
.findAllWithoutCount(DistributionSetTypeSpecification.isDeleted(false), pageable), pageable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -103,8 +103,6 @@ public class JpaSoftwareModuleManagement implements SoftwareModuleManagement {
|
|||||||
|
|
||||||
private final SoftwareModuleTypeRepository softwareModuleTypeRepository;
|
private final SoftwareModuleTypeRepository softwareModuleTypeRepository;
|
||||||
|
|
||||||
private final NoCountPagingRepository criteriaNoCountDao;
|
|
||||||
|
|
||||||
private final AuditorAware<String> auditorProvider;
|
private final AuditorAware<String> auditorProvider;
|
||||||
|
|
||||||
private final ArtifactManagement artifactManagement;
|
private final ArtifactManagement artifactManagement;
|
||||||
@@ -119,8 +117,7 @@ public class JpaSoftwareModuleManagement implements SoftwareModuleManagement {
|
|||||||
final DistributionSetRepository distributionSetRepository,
|
final DistributionSetRepository distributionSetRepository,
|
||||||
final SoftwareModuleRepository softwareModuleRepository,
|
final SoftwareModuleRepository softwareModuleRepository,
|
||||||
final SoftwareModuleMetadataRepository softwareModuleMetadataRepository,
|
final SoftwareModuleMetadataRepository softwareModuleMetadataRepository,
|
||||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
final SoftwareModuleTypeRepository softwareModuleTypeRepository, final AuditorAware<String> auditorProvider,
|
||||||
final NoCountPagingRepository criteriaNoCountDao, final AuditorAware<String> auditorProvider,
|
|
||||||
final ArtifactManagement artifactManagement, final QuotaManagement quotaManagement,
|
final ArtifactManagement artifactManagement, final QuotaManagement quotaManagement,
|
||||||
final VirtualPropertyReplacer virtualPropertyReplacer, final Database database) {
|
final VirtualPropertyReplacer virtualPropertyReplacer, final Database database) {
|
||||||
this.entityManager = entityManager;
|
this.entityManager = entityManager;
|
||||||
@@ -128,7 +125,6 @@ public class JpaSoftwareModuleManagement implements SoftwareModuleManagement {
|
|||||||
this.softwareModuleRepository = softwareModuleRepository;
|
this.softwareModuleRepository = softwareModuleRepository;
|
||||||
this.softwareModuleMetadataRepository = softwareModuleMetadataRepository;
|
this.softwareModuleMetadataRepository = softwareModuleMetadataRepository;
|
||||||
this.softwareModuleTypeRepository = softwareModuleTypeRepository;
|
this.softwareModuleTypeRepository = softwareModuleTypeRepository;
|
||||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
|
||||||
this.auditorProvider = auditorProvider;
|
this.auditorProvider = auditorProvider;
|
||||||
this.artifactManagement = artifactManagement;
|
this.artifactManagement = artifactManagement;
|
||||||
this.quotaManagement = quotaManagement;
|
this.quotaManagement = quotaManagement;
|
||||||
@@ -222,8 +218,7 @@ public class JpaSoftwareModuleManagement implements SoftwareModuleManagement {
|
|||||||
|
|
||||||
private Slice<JpaSoftwareModule> findByCriteriaAPI(final Pageable pageable,
|
private Slice<JpaSoftwareModule> findByCriteriaAPI(final Pageable pageable,
|
||||||
final List<Specification<JpaSoftwareModule>> specList) {
|
final List<Specification<JpaSoftwareModule>> specList) {
|
||||||
return criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable,
|
return softwareModuleRepository.findAllWithoutCount(SpecificationsBuilder.combineWithAnd(specList), pageable);
|
||||||
JpaSoftwareModule.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Long countSwModuleByCriteriaAPI(final List<Specification<JpaSoftwareModule>> specList) {
|
private Long countSwModuleByCriteriaAPI(final List<Specification<JpaSoftwareModule>> specList) {
|
||||||
|
|||||||
@@ -55,19 +55,17 @@ public class JpaSoftwareModuleTypeManagement implements SoftwareModuleTypeManage
|
|||||||
|
|
||||||
private final SoftwareModuleRepository softwareModuleRepository;
|
private final SoftwareModuleRepository softwareModuleRepository;
|
||||||
|
|
||||||
private final NoCountPagingRepository criteriaNoCountDao;
|
|
||||||
private final Database database;
|
private final Database database;
|
||||||
|
|
||||||
public JpaSoftwareModuleTypeManagement(final DistributionSetTypeRepository distributionSetTypeRepository,
|
public JpaSoftwareModuleTypeManagement(final DistributionSetTypeRepository distributionSetTypeRepository,
|
||||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||||
final VirtualPropertyReplacer virtualPropertyReplacer,
|
final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||||
final SoftwareModuleRepository softwareModuleRepository, final NoCountPagingRepository criteriaNoCountDao,
|
final SoftwareModuleRepository softwareModuleRepository,
|
||||||
final Database database) {
|
final Database database) {
|
||||||
this.distributionSetTypeRepository = distributionSetTypeRepository;
|
this.distributionSetTypeRepository = distributionSetTypeRepository;
|
||||||
this.softwareModuleTypeRepository = softwareModuleTypeRepository;
|
this.softwareModuleTypeRepository = softwareModuleTypeRepository;
|
||||||
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
||||||
this.softwareModuleRepository = softwareModuleRepository;
|
this.softwareModuleRepository = softwareModuleRepository;
|
||||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
|
||||||
this.database = database;
|
this.database = database;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,9 +96,9 @@ public class JpaSoftwareModuleTypeManagement implements SoftwareModuleTypeManage
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Slice<SoftwareModuleType> findAll(final Pageable pageable) {
|
public Slice<SoftwareModuleType> findAll(final Pageable pageable) {
|
||||||
return convertPage(criteriaNoCountDao.findAll(
|
return convertPage(softwareModuleTypeRepository.findAllWithoutCount(
|
||||||
(targetRoot, query, cb) -> cb.equal(targetRoot.<Boolean> get(JpaSoftwareModuleType_.deleted), false),
|
(targetRoot, query, cb) -> cb.equal(targetRoot.<Boolean> get(JpaSoftwareModuleType_.deleted), false),
|
||||||
pageable, JpaSoftwareModuleType.class), pageable);
|
pageable), pageable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -108,8 +108,6 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
|
|
||||||
private final TargetTagRepository targetTagRepository;
|
private final TargetTagRepository targetTagRepository;
|
||||||
|
|
||||||
private final NoCountPagingRepository criteriaNoCountDao;
|
|
||||||
|
|
||||||
private final EventPublisherHolder eventPublisherHolder;
|
private final EventPublisherHolder eventPublisherHolder;
|
||||||
|
|
||||||
private final TenantAware tenantAware;
|
private final TenantAware tenantAware;
|
||||||
@@ -125,7 +123,7 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
final RolloutGroupRepository rolloutGroupRepository,
|
final RolloutGroupRepository rolloutGroupRepository,
|
||||||
final DistributionSetRepository distributionSetRepository,
|
final DistributionSetRepository distributionSetRepository,
|
||||||
final TargetFilterQueryRepository targetFilterQueryRepository,
|
final TargetFilterQueryRepository targetFilterQueryRepository,
|
||||||
final TargetTagRepository targetTagRepository, final NoCountPagingRepository criteriaNoCountDao,
|
final TargetTagRepository targetTagRepository,
|
||||||
final EventPublisherHolder eventPublisherHolder, final TenantAware tenantAware,
|
final EventPublisherHolder eventPublisherHolder, final TenantAware tenantAware,
|
||||||
final AfterTransactionCommitExecutor afterCommit, final VirtualPropertyReplacer virtualPropertyReplacer,
|
final AfterTransactionCommitExecutor afterCommit, final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||||
final Database database) {
|
final Database database) {
|
||||||
@@ -137,7 +135,6 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
this.distributionSetRepository = distributionSetRepository;
|
this.distributionSetRepository = distributionSetRepository;
|
||||||
this.targetFilterQueryRepository = targetFilterQueryRepository;
|
this.targetFilterQueryRepository = targetFilterQueryRepository;
|
||||||
this.targetTagRepository = targetTagRepository;
|
this.targetTagRepository = targetTagRepository;
|
||||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
|
||||||
this.eventPublisherHolder = eventPublisherHolder;
|
this.eventPublisherHolder = eventPublisherHolder;
|
||||||
this.tenantAware = tenantAware;
|
this.tenantAware = tenantAware;
|
||||||
this.afterCommit = afterCommit;
|
this.afterCommit = afterCommit;
|
||||||
@@ -300,7 +297,7 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Slice<Target> findAll(final Pageable pageable) {
|
public Slice<Target> findAll(final Pageable pageable) {
|
||||||
return convertPage(criteriaNoCountDao.findAll(pageable, JpaTarget.class), pageable);
|
return convertPage(targetRepository.findAllWithoutCount(pageable), pageable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -488,10 +485,10 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
|
|
||||||
private Slice<Target> findByCriteriaAPI(final Pageable pageable, final List<Specification<JpaTarget>> specList) {
|
private Slice<Target> findByCriteriaAPI(final Pageable pageable, final List<Specification<JpaTarget>> specList) {
|
||||||
if (CollectionUtils.isEmpty(specList)) {
|
if (CollectionUtils.isEmpty(specList)) {
|
||||||
return convertPage(criteriaNoCountDao.findAll(pageable, JpaTarget.class), pageable);
|
return convertPage(targetRepository.findAllWithoutCount(pageable), pageable);
|
||||||
}
|
}
|
||||||
return convertPage(
|
return convertPage(
|
||||||
criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable, JpaTarget.class),
|
targetRepository.findAllWithoutCount(SpecificationsBuilder.combineWithAnd(specList), pageable),
|
||||||
pageable);
|
pageable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,116 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2015 Bosch Software Innovations GmbH and others.
|
|
||||||
*
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*/
|
|
||||||
package org.eclipse.hawkbit.repository.jpa;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.EntityManager;
|
|
||||||
import javax.persistence.TypedQuery;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.data.domain.Page;
|
|
||||||
import org.springframework.data.domain.PageImpl;
|
|
||||||
import org.springframework.data.domain.Pageable;
|
|
||||||
import org.springframework.data.domain.Slice;
|
|
||||||
import org.springframework.data.jpa.domain.Specification;
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
|
|
||||||
import org.springframework.lang.Nullable;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Workaround as spring data does not provide a {@link Slice} based
|
|
||||||
* {@link JpaRepository#findAll()}.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
public class NoCountPagingRepository {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
protected EntityManager em;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Searches without the need for an extra count query.
|
|
||||||
*
|
|
||||||
* @param spec
|
|
||||||
* to search for
|
|
||||||
* @param pageable
|
|
||||||
* information
|
|
||||||
* @param domainClass
|
|
||||||
* of the {@link Entity}
|
|
||||||
*
|
|
||||||
* @return {@link Slice} of data
|
|
||||||
*
|
|
||||||
* @see org.springframework.data.jpa.repository.JpaSpecificationExecutor#findAll(org.springframework
|
|
||||||
* .data.jpa.domain.Specification,
|
|
||||||
* org.springframework.data.domain.Pageable)
|
|
||||||
*/
|
|
||||||
public <T, I extends Serializable> Slice<T> findAll(final Specification<T> spec, final Pageable pageable,
|
|
||||||
final Class<T> domainClass) {
|
|
||||||
final SimpleJpaNoCountRepository<T, I> noCountDao = new SimpleJpaNoCountRepository<>(domainClass, em);
|
|
||||||
return noCountDao.findAll(spec, pageable);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Searches without the need for an extra count query.
|
|
||||||
*
|
|
||||||
* @param pageable
|
|
||||||
* information
|
|
||||||
* @param domainClass
|
|
||||||
* of the {@link Entity}
|
|
||||||
*
|
|
||||||
* @return {@link Slice} of data
|
|
||||||
*
|
|
||||||
* @see org.springframework.data.jpa.repository.JpaSpecificationExecutor#findAll(org.springframework
|
|
||||||
* .data.jpa.domain.Specification,
|
|
||||||
* org.springframework.data.domain.Pageable)
|
|
||||||
*/
|
|
||||||
public <T, I extends Serializable> Slice<T> findAll(final Pageable pageable, final Class<T> domainClass) {
|
|
||||||
final SimpleJpaNoCountRepository<T, I> noCountDao = new SimpleJpaNoCountRepository<>(domainClass, em);
|
|
||||||
return noCountDao.findAll(pageable);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Repository implementation with disabled count query.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param <T>
|
|
||||||
* entity type
|
|
||||||
* @param <I>
|
|
||||||
* key or ID type
|
|
||||||
*/
|
|
||||||
public static class SimpleJpaNoCountRepository<T, I extends Serializable> extends SimpleJpaRepository<T, I> {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor.
|
|
||||||
*
|
|
||||||
* @param domainClass
|
|
||||||
* of the {@link Entity}
|
|
||||||
* @param em
|
|
||||||
* {@link EntityManager} instance for the queries
|
|
||||||
*/
|
|
||||||
public SimpleJpaNoCountRepository(final Class<T> domainClass, final EntityManager em) {
|
|
||||||
super(domainClass, em);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected <S extends T> Page<S> readPage(final TypedQuery<S> query, final Class<S> domainClass,
|
|
||||||
final Pageable pageable, @Nullable final Specification<S> spec) {
|
|
||||||
query.setFirstResult((int) pageable.getOffset());
|
|
||||||
query.setMaxResults(pageable.getPageSize());
|
|
||||||
|
|
||||||
final List<S> content = query.getResultList();
|
|
||||||
|
|
||||||
return new PageImpl<>(content, pageable, content.size());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2021 Bosch.IO GmbH and others.
|
||||||
|
*
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*/
|
||||||
|
package org.eclipse.hawkbit.repository.jpa;
|
||||||
|
|
||||||
|
import org.eclipse.hawkbit.repository.model.BaseEntity;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.data.domain.Slice;
|
||||||
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Repository interface that offers findAll with disabled count query.
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
* entity type
|
||||||
|
*/
|
||||||
|
public interface NoCountSliceRepository<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a slice of {@link BaseEntity}s without keeping the count updated
|
||||||
|
*
|
||||||
|
* @param pageable
|
||||||
|
* page to keep track of slices
|
||||||
|
* @return {@link BaseEntity}
|
||||||
|
*/
|
||||||
|
Slice<T> findAllWithoutCount(Pageable pageable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a slice of {@link BaseEntity}s based on spec without keeping the
|
||||||
|
* count updated
|
||||||
|
*
|
||||||
|
* @param spec
|
||||||
|
* to search for
|
||||||
|
* @param pageable
|
||||||
|
* page to keep track of slices
|
||||||
|
* @return {@link BaseEntity}
|
||||||
|
*/
|
||||||
|
Slice<T> findAllWithoutCount(@Nullable Specification<T> spec, Pageable pageable);
|
||||||
|
}
|
||||||
@@ -134,7 +134,7 @@ import com.google.common.collect.Maps;
|
|||||||
* General configuration for hawkBit's Repository.
|
* General configuration for hawkBit's Repository.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@EnableJpaRepositories("org.eclipse.hawkbit.repository.jpa")
|
@EnableJpaRepositories(value = "org.eclipse.hawkbit.repository.jpa", repositoryBaseClass = SimpleJpaWithNoCountRepository.class)
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@EnableJpaAuditing
|
@EnableJpaAuditing
|
||||||
@EnableAspectJAutoProxy
|
@EnableAspectJAutoProxy
|
||||||
@@ -194,12 +194,6 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
|||||||
return new AfterTransactionCommitDefaultServiceExecutor();
|
return new AfterTransactionCommitDefaultServiceExecutor();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnMissingBean
|
|
||||||
NoCountPagingRepository noCountPagingRepository() {
|
|
||||||
return new NoCountPagingRepository();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
RsqlValidationOracle rsqlValidationOracle() {
|
RsqlValidationOracle rsqlValidationOracle() {
|
||||||
@@ -447,14 +441,14 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
|||||||
final DistributionSetTypeManagement distributionSetTypeManagement, final QuotaManagement quotaManagement,
|
final DistributionSetTypeManagement distributionSetTypeManagement, final QuotaManagement quotaManagement,
|
||||||
final DistributionSetMetadataRepository distributionSetMetadataRepository,
|
final DistributionSetMetadataRepository distributionSetMetadataRepository,
|
||||||
final TargetFilterQueryRepository targetFilterQueryRepository, final ActionRepository actionRepository,
|
final TargetFilterQueryRepository targetFilterQueryRepository, final ActionRepository actionRepository,
|
||||||
final NoCountPagingRepository criteriaNoCountDao, final EventPublisherHolder eventPublisherHolder,
|
final EventPublisherHolder eventPublisherHolder, final TenantAware tenantAware,
|
||||||
final TenantAware tenantAware, final VirtualPropertyReplacer virtualPropertyReplacer,
|
final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||||
final SoftwareModuleRepository softwareModuleRepository,
|
final SoftwareModuleRepository softwareModuleRepository,
|
||||||
final DistributionSetTagRepository distributionSetTagRepository,
|
final DistributionSetTagRepository distributionSetTagRepository,
|
||||||
final AfterTransactionCommitExecutor afterCommit, final JpaProperties properties) {
|
final AfterTransactionCommitExecutor afterCommit, final JpaProperties properties) {
|
||||||
return new JpaDistributionSetManagement(entityManager, distributionSetRepository, distributionSetTagManagement,
|
return new JpaDistributionSetManagement(entityManager, distributionSetRepository, distributionSetTagManagement,
|
||||||
systemManagement, distributionSetTypeManagement, quotaManagement, distributionSetMetadataRepository,
|
systemManagement, distributionSetTypeManagement, quotaManagement, distributionSetMetadataRepository,
|
||||||
targetFilterQueryRepository, actionRepository, criteriaNoCountDao, eventPublisherHolder, tenantAware,
|
targetFilterQueryRepository, actionRepository, eventPublisherHolder, tenantAware,
|
||||||
virtualPropertyReplacer, softwareModuleRepository, distributionSetTagRepository, afterCommit,
|
virtualPropertyReplacer, softwareModuleRepository, distributionSetTagRepository, afterCommit,
|
||||||
properties.getDatabase());
|
properties.getDatabase());
|
||||||
|
|
||||||
@@ -471,11 +465,10 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
|||||||
final DistributionSetTypeRepository distributionSetTypeRepository,
|
final DistributionSetTypeRepository distributionSetTypeRepository,
|
||||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||||
final DistributionSetRepository distributionSetRepository,
|
final DistributionSetRepository distributionSetRepository,
|
||||||
final VirtualPropertyReplacer virtualPropertyReplacer, final NoCountPagingRepository criteriaNoCountDao,
|
final VirtualPropertyReplacer virtualPropertyReplacer, final JpaProperties properties,
|
||||||
final JpaProperties properties, final QuotaManagement quotaManagement) {
|
final QuotaManagement quotaManagement) {
|
||||||
return new JpaDistributionSetTypeManagement(distributionSetTypeRepository, softwareModuleTypeRepository,
|
return new JpaDistributionSetTypeManagement(distributionSetTypeRepository, softwareModuleTypeRepository,
|
||||||
distributionSetRepository, virtualPropertyReplacer, criteriaNoCountDao, properties.getDatabase(),
|
distributionSetRepository, virtualPropertyReplacer, properties.getDatabase(), quotaManagement);
|
||||||
quotaManagement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -512,14 +505,12 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
|||||||
final RolloutGroupRepository rolloutGroupRepository,
|
final RolloutGroupRepository rolloutGroupRepository,
|
||||||
final DistributionSetRepository distributionSetRepository,
|
final DistributionSetRepository distributionSetRepository,
|
||||||
final TargetFilterQueryRepository targetFilterQueryRepository,
|
final TargetFilterQueryRepository targetFilterQueryRepository,
|
||||||
final TargetTagRepository targetTagRepository, final NoCountPagingRepository criteriaNoCountDao,
|
final TargetTagRepository targetTagRepository, final EventPublisherHolder eventPublisherHolder,
|
||||||
final EventPublisherHolder eventPublisherHolder, final TenantAware tenantAware,
|
final TenantAware tenantAware, final AfterTransactionCommitExecutor afterCommit,
|
||||||
final AfterTransactionCommitExecutor afterCommit, final VirtualPropertyReplacer virtualPropertyReplacer,
|
final VirtualPropertyReplacer virtualPropertyReplacer, final JpaProperties properties) {
|
||||||
final JpaProperties properties) {
|
|
||||||
return new JpaTargetManagement(entityManager, quotaManagement, targetRepository, targetMetadataRepository,
|
return new JpaTargetManagement(entityManager, quotaManagement, targetRepository, targetMetadataRepository,
|
||||||
rolloutGroupRepository, distributionSetRepository, targetFilterQueryRepository, targetTagRepository,
|
rolloutGroupRepository, distributionSetRepository, targetFilterQueryRepository, targetTagRepository,
|
||||||
criteriaNoCountDao, eventPublisherHolder, tenantAware, afterCommit, virtualPropertyReplacer,
|
eventPublisherHolder, tenantAware, afterCommit, virtualPropertyReplacer, properties.getDatabase());
|
||||||
properties.getDatabase());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -579,10 +570,9 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
|||||||
DistributionSetTagManagement distributionSetTagManagement(
|
DistributionSetTagManagement distributionSetTagManagement(
|
||||||
final DistributionSetTagRepository distributionSetTagRepository,
|
final DistributionSetTagRepository distributionSetTagRepository,
|
||||||
final DistributionSetRepository distributionSetRepository,
|
final DistributionSetRepository distributionSetRepository,
|
||||||
final VirtualPropertyReplacer virtualPropertyReplacer, final NoCountPagingRepository criteriaNoCountDao,
|
final VirtualPropertyReplacer virtualPropertyReplacer, final JpaProperties properties) {
|
||||||
final JpaProperties properties) {
|
|
||||||
return new JpaDistributionSetTagManagement(distributionSetTagRepository, distributionSetRepository,
|
return new JpaDistributionSetTagManagement(distributionSetTagRepository, distributionSetRepository,
|
||||||
virtualPropertyReplacer, criteriaNoCountDao, properties.getDatabase());
|
virtualPropertyReplacer, properties.getDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -596,13 +586,12 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
|||||||
final DistributionSetRepository distributionSetRepository,
|
final DistributionSetRepository distributionSetRepository,
|
||||||
final SoftwareModuleRepository softwareModuleRepository,
|
final SoftwareModuleRepository softwareModuleRepository,
|
||||||
final SoftwareModuleMetadataRepository softwareModuleMetadataRepository,
|
final SoftwareModuleMetadataRepository softwareModuleMetadataRepository,
|
||||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
final SoftwareModuleTypeRepository softwareModuleTypeRepository, final AuditorAware<String> auditorProvider,
|
||||||
final NoCountPagingRepository criteriaNoCountDao, final AuditorAware<String> auditorProvider,
|
|
||||||
final ArtifactManagement artifactManagement, final QuotaManagement quotaManagement,
|
final ArtifactManagement artifactManagement, final QuotaManagement quotaManagement,
|
||||||
final VirtualPropertyReplacer virtualPropertyReplacer, final JpaProperties properties) {
|
final VirtualPropertyReplacer virtualPropertyReplacer, final JpaProperties properties) {
|
||||||
return new JpaSoftwareModuleManagement(entityManager, distributionSetRepository, softwareModuleRepository,
|
return new JpaSoftwareModuleManagement(entityManager, distributionSetRepository, softwareModuleRepository,
|
||||||
softwareModuleMetadataRepository, softwareModuleTypeRepository, criteriaNoCountDao, auditorProvider,
|
softwareModuleMetadataRepository, softwareModuleTypeRepository, auditorProvider, artifactManagement,
|
||||||
artifactManagement, quotaManagement, virtualPropertyReplacer, properties.getDatabase());
|
quotaManagement, virtualPropertyReplacer, properties.getDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -616,10 +605,9 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
|||||||
final DistributionSetTypeRepository distributionSetTypeRepository,
|
final DistributionSetTypeRepository distributionSetTypeRepository,
|
||||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||||
final VirtualPropertyReplacer virtualPropertyReplacer,
|
final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||||
final SoftwareModuleRepository softwareModuleRepository, final NoCountPagingRepository criteriaNoCountDao,
|
final SoftwareModuleRepository softwareModuleRepository, final JpaProperties properties) {
|
||||||
final JpaProperties properties) {
|
|
||||||
return new JpaSoftwareModuleTypeManagement(distributionSetTypeRepository, softwareModuleTypeRepository,
|
return new JpaSoftwareModuleTypeManagement(distributionSetTypeRepository, softwareModuleTypeRepository,
|
||||||
virtualPropertyReplacer, softwareModuleRepository, criteriaNoCountDao, properties.getDatabase());
|
virtualPropertyReplacer, softwareModuleRepository, properties.getDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2021 Bosch.IO GmbH and others.
|
||||||
|
*
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*/
|
||||||
|
package org.eclipse.hawkbit.repository.jpa;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.TypedQuery;
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageImpl;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.data.domain.Slice;
|
||||||
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
|
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
|
||||||
|
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Repository implementation that allows findAll with disabled count query.
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
* entity type
|
||||||
|
* @param <I>
|
||||||
|
* key or ID type
|
||||||
|
*/
|
||||||
|
public class SimpleJpaWithNoCountRepository<T, I extends Serializable> extends SimpleJpaRepository<T, I>
|
||||||
|
implements NoCountSliceRepository<T> {
|
||||||
|
|
||||||
|
public SimpleJpaWithNoCountRepository(final Class<T> domainClass, final EntityManager em) {
|
||||||
|
super(domainClass, em);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleJpaWithNoCountRepository(JpaEntityInformation<T, ?> entityInformation, EntityManager entityManager) {
|
||||||
|
super(entityInformation, entityManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Slice<T> findAllWithoutCount(@Nullable Specification<T> spec, Pageable pageable) {
|
||||||
|
TypedQuery<T> query = getQuery(spec, pageable);
|
||||||
|
return pageable.isUnpaged() ? new PageImpl<>(query.getResultList()) : readPageWithoutCount(query, pageable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Slice<T> findAllWithoutCount(final Pageable pageable) {
|
||||||
|
return findAllWithoutCount(null, pageable);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected <S extends T> Page<S> readPageWithoutCount(final TypedQuery<S> query, final Pageable pageable) {
|
||||||
|
query.setFirstResult((int) pageable.getOffset());
|
||||||
|
query.setMaxResults(pageable.getPageSize());
|
||||||
|
|
||||||
|
final List<S> content = query.getResultList();
|
||||||
|
|
||||||
|
return new PageImpl<>(content, pageable, content.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user