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
|
||||
@Transactional(readOnly = true)
|
||||
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.
|
||||
|
||||
@@ -100,8 +100,6 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
||||
|
||||
private final ActionRepository actionRepository;
|
||||
|
||||
private final NoCountPagingRepository criteriaNoCountDao;
|
||||
|
||||
private final EventPublisherHolder eventPublisherHolder;
|
||||
|
||||
private final TenantAware tenantAware;
|
||||
@@ -122,8 +120,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
||||
final DistributionSetTypeManagement distributionSetTypeManagement, final QuotaManagement quotaManagement,
|
||||
final DistributionSetMetadataRepository distributionSetMetadataRepository,
|
||||
final TargetFilterQueryRepository targetFilterQueryRepository, final ActionRepository actionRepository,
|
||||
final NoCountPagingRepository criteriaNoCountDao, final EventPublisherHolder eventPublisherHolder,
|
||||
final TenantAware tenantAware, final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||
final EventPublisherHolder eventPublisherHolder, final TenantAware tenantAware,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||
final SoftwareModuleRepository softwareModuleRepository,
|
||||
final DistributionSetTagRepository distributionSetTagRepository,
|
||||
final AfterTransactionCommitExecutor afterCommit, final Database database) {
|
||||
@@ -136,7 +134,6 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
||||
this.distributionSetMetadataRepository = distributionSetMetadataRepository;
|
||||
this.targetFilterQueryRepository = targetFilterQueryRepository;
|
||||
this.actionRepository = actionRepository;
|
||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
||||
this.eventPublisherHolder = eventPublisherHolder;
|
||||
this.tenantAware = tenantAware;
|
||||
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
||||
@@ -793,8 +790,9 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
||||
|
||||
@Override
|
||||
public Slice<DistributionSet> findAll(final Pageable pageable) {
|
||||
return convertDsPage(criteriaNoCountDao.findAll(DistributionSetSpecification.isDeleted(false), pageable,
|
||||
JpaDistributionSet.class), pageable);
|
||||
return convertDsPage(
|
||||
distributionSetRepository.findAllWithoutCount(DistributionSetSpecification.isDeleted(false), pageable),
|
||||
pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -55,18 +55,14 @@ public class JpaDistributionSetTagManagement implements DistributionSetTagManage
|
||||
|
||||
private final VirtualPropertyReplacer virtualPropertyReplacer;
|
||||
|
||||
private final NoCountPagingRepository criteriaNoCountDao;
|
||||
|
||||
private final Database database;
|
||||
|
||||
JpaDistributionSetTagManagement(final DistributionSetTagRepository distributionSetTagRepository,
|
||||
final DistributionSetRepository distributionSetRepository,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final NoCountPagingRepository criteriaNoCountDao,
|
||||
final Database database) {
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final Database database) {
|
||||
this.distributionSetTagRepository = distributionSetTagRepository;
|
||||
this.distributionSetRepository = distributionSetRepository;
|
||||
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
@@ -129,7 +125,7 @@ public class JpaDistributionSetTagManagement implements DistributionSetTagManage
|
||||
|
||||
@Override
|
||||
public Slice<DistributionSetTag> findAll(final Pageable pageable) {
|
||||
return convertDsPage(criteriaNoCountDao.findAll(pageable, JpaDistributionSetTag.class), pageable);
|
||||
return convertDsPage(distributionSetTagRepository.findAllWithoutCount(pageable), pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -68,7 +68,6 @@ public class JpaDistributionSetTypeManagement implements DistributionSetTypeMana
|
||||
|
||||
private final VirtualPropertyReplacer virtualPropertyReplacer;
|
||||
|
||||
private final NoCountPagingRepository criteriaNoCountDao;
|
||||
private final Database database;
|
||||
|
||||
private final QuotaManagement quotaManagement;
|
||||
@@ -76,13 +75,12 @@ public class JpaDistributionSetTypeManagement implements DistributionSetTypeMana
|
||||
JpaDistributionSetTypeManagement(final DistributionSetTypeRepository distributionSetTypeRepository,
|
||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||
final DistributionSetRepository distributionSetRepository,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final NoCountPagingRepository criteriaNoCountDao,
|
||||
final Database database, final QuotaManagement quotaManagement) {
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final Database database,
|
||||
final QuotaManagement quotaManagement) {
|
||||
this.distributionSetTypeRepository = distributionSetTypeRepository;
|
||||
this.softwareModuleTypeRepository = softwareModuleTypeRepository;
|
||||
this.distributionSetRepository = distributionSetRepository;
|
||||
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
||||
this.database = database;
|
||||
this.quotaManagement = quotaManagement;
|
||||
}
|
||||
@@ -234,8 +232,8 @@ public class JpaDistributionSetTypeManagement implements DistributionSetTypeMana
|
||||
|
||||
@Override
|
||||
public Slice<DistributionSetType> findAll(final Pageable pageable) {
|
||||
return convertPage(criteriaNoCountDao.findAll(DistributionSetTypeSpecification.isDeleted(false), pageable,
|
||||
JpaDistributionSetType.class), pageable);
|
||||
return convertPage(distributionSetTypeRepository
|
||||
.findAllWithoutCount(DistributionSetTypeSpecification.isDeleted(false), pageable), pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -103,8 +103,6 @@ public class JpaSoftwareModuleManagement implements SoftwareModuleManagement {
|
||||
|
||||
private final SoftwareModuleTypeRepository softwareModuleTypeRepository;
|
||||
|
||||
private final NoCountPagingRepository criteriaNoCountDao;
|
||||
|
||||
private final AuditorAware<String> auditorProvider;
|
||||
|
||||
private final ArtifactManagement artifactManagement;
|
||||
@@ -119,8 +117,7 @@ public class JpaSoftwareModuleManagement implements SoftwareModuleManagement {
|
||||
final DistributionSetRepository distributionSetRepository,
|
||||
final SoftwareModuleRepository softwareModuleRepository,
|
||||
final SoftwareModuleMetadataRepository softwareModuleMetadataRepository,
|
||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||
final NoCountPagingRepository criteriaNoCountDao, final AuditorAware<String> auditorProvider,
|
||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository, final AuditorAware<String> auditorProvider,
|
||||
final ArtifactManagement artifactManagement, final QuotaManagement quotaManagement,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final Database database) {
|
||||
this.entityManager = entityManager;
|
||||
@@ -128,7 +125,6 @@ public class JpaSoftwareModuleManagement implements SoftwareModuleManagement {
|
||||
this.softwareModuleRepository = softwareModuleRepository;
|
||||
this.softwareModuleMetadataRepository = softwareModuleMetadataRepository;
|
||||
this.softwareModuleTypeRepository = softwareModuleTypeRepository;
|
||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
||||
this.auditorProvider = auditorProvider;
|
||||
this.artifactManagement = artifactManagement;
|
||||
this.quotaManagement = quotaManagement;
|
||||
@@ -222,8 +218,7 @@ public class JpaSoftwareModuleManagement implements SoftwareModuleManagement {
|
||||
|
||||
private Slice<JpaSoftwareModule> findByCriteriaAPI(final Pageable pageable,
|
||||
final List<Specification<JpaSoftwareModule>> specList) {
|
||||
return criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable,
|
||||
JpaSoftwareModule.class);
|
||||
return softwareModuleRepository.findAllWithoutCount(SpecificationsBuilder.combineWithAnd(specList), pageable);
|
||||
}
|
||||
|
||||
private Long countSwModuleByCriteriaAPI(final List<Specification<JpaSoftwareModule>> specList) {
|
||||
|
||||
@@ -55,19 +55,17 @@ public class JpaSoftwareModuleTypeManagement implements SoftwareModuleTypeManage
|
||||
|
||||
private final SoftwareModuleRepository softwareModuleRepository;
|
||||
|
||||
private final NoCountPagingRepository criteriaNoCountDao;
|
||||
private final Database database;
|
||||
|
||||
public JpaSoftwareModuleTypeManagement(final DistributionSetTypeRepository distributionSetTypeRepository,
|
||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||
final SoftwareModuleRepository softwareModuleRepository, final NoCountPagingRepository criteriaNoCountDao,
|
||||
final SoftwareModuleRepository softwareModuleRepository,
|
||||
final Database database) {
|
||||
this.distributionSetTypeRepository = distributionSetTypeRepository;
|
||||
this.softwareModuleTypeRepository = softwareModuleTypeRepository;
|
||||
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
||||
this.softwareModuleRepository = softwareModuleRepository;
|
||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
@@ -98,9 +96,9 @@ public class JpaSoftwareModuleTypeManagement implements SoftwareModuleTypeManage
|
||||
|
||||
@Override
|
||||
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),
|
||||
pageable, JpaSoftwareModuleType.class), pageable);
|
||||
pageable), pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -108,8 +108,6 @@ public class JpaTargetManagement implements TargetManagement {
|
||||
|
||||
private final TargetTagRepository targetTagRepository;
|
||||
|
||||
private final NoCountPagingRepository criteriaNoCountDao;
|
||||
|
||||
private final EventPublisherHolder eventPublisherHolder;
|
||||
|
||||
private final TenantAware tenantAware;
|
||||
@@ -125,7 +123,7 @@ public class JpaTargetManagement implements TargetManagement {
|
||||
final RolloutGroupRepository rolloutGroupRepository,
|
||||
final DistributionSetRepository distributionSetRepository,
|
||||
final TargetFilterQueryRepository targetFilterQueryRepository,
|
||||
final TargetTagRepository targetTagRepository, final NoCountPagingRepository criteriaNoCountDao,
|
||||
final TargetTagRepository targetTagRepository,
|
||||
final EventPublisherHolder eventPublisherHolder, final TenantAware tenantAware,
|
||||
final AfterTransactionCommitExecutor afterCommit, final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||
final Database database) {
|
||||
@@ -137,7 +135,6 @@ public class JpaTargetManagement implements TargetManagement {
|
||||
this.distributionSetRepository = distributionSetRepository;
|
||||
this.targetFilterQueryRepository = targetFilterQueryRepository;
|
||||
this.targetTagRepository = targetTagRepository;
|
||||
this.criteriaNoCountDao = criteriaNoCountDao;
|
||||
this.eventPublisherHolder = eventPublisherHolder;
|
||||
this.tenantAware = tenantAware;
|
||||
this.afterCommit = afterCommit;
|
||||
@@ -300,7 +297,7 @@ public class JpaTargetManagement implements TargetManagement {
|
||||
|
||||
@Override
|
||||
public Slice<Target> findAll(final Pageable pageable) {
|
||||
return convertPage(criteriaNoCountDao.findAll(pageable, JpaTarget.class), pageable);
|
||||
return convertPage(targetRepository.findAllWithoutCount(pageable), pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -488,10 +485,10 @@ public class JpaTargetManagement implements TargetManagement {
|
||||
|
||||
private Slice<Target> findByCriteriaAPI(final Pageable pageable, final List<Specification<JpaTarget>> specList) {
|
||||
if (CollectionUtils.isEmpty(specList)) {
|
||||
return convertPage(criteriaNoCountDao.findAll(pageable, JpaTarget.class), pageable);
|
||||
return convertPage(targetRepository.findAllWithoutCount(pageable), pageable);
|
||||
}
|
||||
return convertPage(
|
||||
criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable, JpaTarget.class),
|
||||
targetRepository.findAllWithoutCount(SpecificationsBuilder.combineWithAnd(specList), 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.
|
||||
*
|
||||
*/
|
||||
@EnableJpaRepositories("org.eclipse.hawkbit.repository.jpa")
|
||||
@EnableJpaRepositories(value = "org.eclipse.hawkbit.repository.jpa", repositoryBaseClass = SimpleJpaWithNoCountRepository.class)
|
||||
@EnableTransactionManagement
|
||||
@EnableJpaAuditing
|
||||
@EnableAspectJAutoProxy
|
||||
@@ -194,12 +194,6 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
||||
return new AfterTransactionCommitDefaultServiceExecutor();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
NoCountPagingRepository noCountPagingRepository() {
|
||||
return new NoCountPagingRepository();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
RsqlValidationOracle rsqlValidationOracle() {
|
||||
@@ -447,14 +441,14 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
||||
final DistributionSetTypeManagement distributionSetTypeManagement, final QuotaManagement quotaManagement,
|
||||
final DistributionSetMetadataRepository distributionSetMetadataRepository,
|
||||
final TargetFilterQueryRepository targetFilterQueryRepository, final ActionRepository actionRepository,
|
||||
final NoCountPagingRepository criteriaNoCountDao, final EventPublisherHolder eventPublisherHolder,
|
||||
final TenantAware tenantAware, final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||
final EventPublisherHolder eventPublisherHolder, final TenantAware tenantAware,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||
final SoftwareModuleRepository softwareModuleRepository,
|
||||
final DistributionSetTagRepository distributionSetTagRepository,
|
||||
final AfterTransactionCommitExecutor afterCommit, final JpaProperties properties) {
|
||||
return new JpaDistributionSetManagement(entityManager, distributionSetRepository, distributionSetTagManagement,
|
||||
systemManagement, distributionSetTypeManagement, quotaManagement, distributionSetMetadataRepository,
|
||||
targetFilterQueryRepository, actionRepository, criteriaNoCountDao, eventPublisherHolder, tenantAware,
|
||||
targetFilterQueryRepository, actionRepository, eventPublisherHolder, tenantAware,
|
||||
virtualPropertyReplacer, softwareModuleRepository, distributionSetTagRepository, afterCommit,
|
||||
properties.getDatabase());
|
||||
|
||||
@@ -471,11 +465,10 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
||||
final DistributionSetTypeRepository distributionSetTypeRepository,
|
||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||
final DistributionSetRepository distributionSetRepository,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final NoCountPagingRepository criteriaNoCountDao,
|
||||
final JpaProperties properties, final QuotaManagement quotaManagement) {
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final JpaProperties properties,
|
||||
final QuotaManagement quotaManagement) {
|
||||
return new JpaDistributionSetTypeManagement(distributionSetTypeRepository, softwareModuleTypeRepository,
|
||||
distributionSetRepository, virtualPropertyReplacer, criteriaNoCountDao, properties.getDatabase(),
|
||||
quotaManagement);
|
||||
distributionSetRepository, virtualPropertyReplacer, properties.getDatabase(), quotaManagement);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -512,14 +505,12 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
||||
final RolloutGroupRepository rolloutGroupRepository,
|
||||
final DistributionSetRepository distributionSetRepository,
|
||||
final TargetFilterQueryRepository targetFilterQueryRepository,
|
||||
final TargetTagRepository targetTagRepository, final NoCountPagingRepository criteriaNoCountDao,
|
||||
final EventPublisherHolder eventPublisherHolder, final TenantAware tenantAware,
|
||||
final AfterTransactionCommitExecutor afterCommit, final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||
final JpaProperties properties) {
|
||||
final TargetTagRepository targetTagRepository, final EventPublisherHolder eventPublisherHolder,
|
||||
final TenantAware tenantAware, final AfterTransactionCommitExecutor afterCommit,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final JpaProperties properties) {
|
||||
return new JpaTargetManagement(entityManager, quotaManagement, targetRepository, targetMetadataRepository,
|
||||
rolloutGroupRepository, distributionSetRepository, targetFilterQueryRepository, targetTagRepository,
|
||||
criteriaNoCountDao, eventPublisherHolder, tenantAware, afterCommit, virtualPropertyReplacer,
|
||||
properties.getDatabase());
|
||||
eventPublisherHolder, tenantAware, afterCommit, virtualPropertyReplacer, properties.getDatabase());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -579,10 +570,9 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
||||
DistributionSetTagManagement distributionSetTagManagement(
|
||||
final DistributionSetTagRepository distributionSetTagRepository,
|
||||
final DistributionSetRepository distributionSetRepository,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final NoCountPagingRepository criteriaNoCountDao,
|
||||
final JpaProperties properties) {
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final JpaProperties properties) {
|
||||
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 SoftwareModuleRepository softwareModuleRepository,
|
||||
final SoftwareModuleMetadataRepository softwareModuleMetadataRepository,
|
||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||
final NoCountPagingRepository criteriaNoCountDao, final AuditorAware<String> auditorProvider,
|
||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository, final AuditorAware<String> auditorProvider,
|
||||
final ArtifactManagement artifactManagement, final QuotaManagement quotaManagement,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer, final JpaProperties properties) {
|
||||
return new JpaSoftwareModuleManagement(entityManager, distributionSetRepository, softwareModuleRepository,
|
||||
softwareModuleMetadataRepository, softwareModuleTypeRepository, criteriaNoCountDao, auditorProvider,
|
||||
artifactManagement, quotaManagement, virtualPropertyReplacer, properties.getDatabase());
|
||||
softwareModuleMetadataRepository, softwareModuleTypeRepository, auditorProvider, artifactManagement,
|
||||
quotaManagement, virtualPropertyReplacer, properties.getDatabase());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -616,10 +605,9 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
||||
final DistributionSetTypeRepository distributionSetTypeRepository,
|
||||
final SoftwareModuleTypeRepository softwareModuleTypeRepository,
|
||||
final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||
final SoftwareModuleRepository softwareModuleRepository, final NoCountPagingRepository criteriaNoCountDao,
|
||||
final JpaProperties properties) {
|
||||
final SoftwareModuleRepository softwareModuleRepository, final JpaProperties properties) {
|
||||
return new JpaSoftwareModuleTypeManagement(distributionSetTypeRepository, softwareModuleTypeRepository,
|
||||
virtualPropertyReplacer, softwareModuleRepository, criteriaNoCountDao, properties.getDatabase());
|
||||
virtualPropertyReplacer, softwareModuleRepository, properties.getDatabase());
|
||||
}
|
||||
|
||||
@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