Class JpaTrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
- java.lang.Object
-
- com.broadleafcommerce.data.tracking.jpa.messaging.BaseJpaNotificationStateRepository
-
- com.broadleafcommerce.data.tracking.jpa.messaging.JpaTrackableNotificationStateRepository
-
- com.broadleafcommerce.data.tracking.jpa.filtering.JpaTrackableRepository<D>
-
- All Implemented Interfaces:
com.broadleafcommerce.common.extension.DomainTypeAware
,com.broadleafcommerce.common.messaging.notification.NotificationStateRepository
,com.broadleafcommerce.data.tracking.core.TrackableRepository<D>
,org.springframework.data.repository.Repository<D,String>
public class JpaTrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable> extends JpaTrackableNotificationStateRepository implements com.broadleafcommerce.data.tracking.core.TrackableRepository<D>
Version ofTrackableRepository
backed by Jpa. Generally, platform specific repositories will be enabled viaEnableJpaRepositories
annotation on a Spring configuration class. For example, you may enable Jpa repository support with a configuration class similar to this:@Configuration
@EnableJpaRepositories(repositoryFactoryBeanClass = NarrowingJpaRepositoryFactoryBean.class)
public class JpaConfig { }JpaRepositoryEntityTypeOverride
bean can be declared that explicitly denotes the type that should be filtered in queries by this repository. You should only have to think about this if you have one or more extensions of a parent entity populated. Furthermore, if the system detects there is no sibling polymorphism (i.e. only a single line of inheritance), it will automatically infer the most derived type for this repository (it will also automatically register aTypeFactory
member for the extension if one is not already present). This is a performance enhancement, as the ORM layer will be able to optimize the resulting query when it is made specific to a derived type. This behavior can be changed at any time by declaring aJpaRepositoryEntityTypeOverride
to a higher level domain class, at which point polymorphic variation is reintroduced in query results at the cost of a more expensive query.- Author:
- Jeff Fischer
-
-
Constructor Summary
Constructors Constructor Description JpaTrackableRepository(org.springframework.data.jpa.repository.support.JpaEntityInformation<D,String> metadata, javax.persistence.EntityManager em)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
applyLock(D managed)
Apply JPA locking strategies if required.protected void
applyTransientTrackingStateIfApplicable(com.broadleafcommerce.data.tracking.core.Trackable trackable)
D
archive(D entity, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
boolean
existsByContextId(String contextId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
List<D>
findAll(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
List<D>
findAll(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, Class<D> type)
protected List<D>
findAll(javax.persistence.criteria.CriteriaQuery<D> query, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, Class<D> type)
protected List<D>
findAll(javax.persistence.criteria.CriteriaQuery<D> query, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, Class<D> type, Map<String,Object> params)
Find all matching entities given a query.org.springframework.data.domain.Page<D>
findAll(org.springframework.data.domain.Pageable pageable, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
org.springframework.data.domain.Page<D>
findAll(org.springframework.data.domain.Pageable pageable, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, Class<D> type)
List<D>
findAll(org.springframework.data.domain.Sort sort, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
List<D>
findAll(org.springframework.data.domain.Sort sort, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, Class<D> type)
Iterable<D>
findAllByContextId(Iterable<String> contextIds, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Optional<D>
findByContextId(String contextId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Optional<D>
findByContextIdAndCatalog(String contextId, String catalogId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Optional<D>
findByNativeId(@NonNull Object id)
com.broadleafcommerce.data.tracking.core.sort.domain.Sortable
findMaxSortMember(com.broadleafcommerce.data.tracking.core.sort.domain.Sortable example, String maxSort, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
com.broadleafcommerce.data.tracking.core.sort.domain.Sortable
findMinSortMember(com.broadleafcommerce.data.tracking.core.sort.domain.Sortable example, String minSort, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
D
findOriginal(String contextId, String catalogId, String applicationId, String author, String stage, String sandboxId, Integer level)
D
findTarget(String contextId, String catalogId, String applicationId, String author, String stage, String sandboxId, Integer level, Set<String> visibleFromCatalog)
org.springframework.data.jpa.repository.support.JpaEntityInformation<D,String>
getEntityInformation()
javax.persistence.EntityManager
getEntityManager()
com.broadleafcommerce.data.tracking.core.TrackableBehaviorUtil
getTrackableBehaviorUtil()
List<Class<?>>
getTypesToRegisterInMappingContext()
protected void
loadTransientTrackingStateIfApplicable(com.broadleafcommerce.data.tracking.core.Trackable trackable)
boolean
pruneChangeDetails(@NonNull Object nativeId)
void
pruneRestingNotificationStates(Duration beforeNow)
void
purgeObsoleteSandboxData(Duration beforeNow)
D
save(D entity, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Iterable<D>
saveAll(Iterable<D> entities, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
void
setCatalogFiltersCriteriaBuilder(JpaFiltersCriteriaBuilder builder)
void
setJpaProperties(JpaProperties properties)
void
setRepositoryEntityTypeManager(com.broadleafcommerce.common.jpa.RepositoryEntityTypeManager repositoryEntityTypeManager)
void
setTrackableBehaviorUtil(com.broadleafcommerce.data.tracking.core.TrackableBehaviorUtil behaviorUtil)
-
Methods inherited from class com.broadleafcommerce.data.tracking.jpa.messaging.BaseJpaNotificationStateRepository
findNotificationReadyMembers, getEntityTypes, getPolyMorphicVariations, setFailedNotificationAttempt, setNotificationAcknowledged
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
-
-
-
Method Detail
-
getEntityInformation
public org.springframework.data.jpa.repository.support.JpaEntityInformation<D,String> getEntityInformation()
- Specified by:
getEntityInformation
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
getEntityManager
public javax.persistence.EntityManager getEntityManager()
- Overrides:
getEntityManager
in classBaseJpaNotificationStateRepository
-
save
@NonNull @Transactional public D save(@NonNull D entity, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
save
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
applyTransientTrackingStateIfApplicable
protected void applyTransientTrackingStateIfApplicable(com.broadleafcommerce.data.tracking.core.Trackable trackable)
-
loadTransientTrackingStateIfApplicable
protected void loadTransientTrackingStateIfApplicable(com.broadleafcommerce.data.tracking.core.Trackable trackable)
-
applyLock
protected void applyLock(D managed)
Apply JPA locking strategies if required. By default, only appliesLockModeType.OPTIMISTIC
when the entity being saved is versioned. This is explicitly called after a merge because locking requires a managed instance, and there is no need to lock after a persist since the entity is brand new and there cannot be any update conflicts. The lock doesn't immediately do anything, but schedules an action for when the persistence context is flushed to verify the version.- Parameters:
managed
- the managed instance to apply the lock to
-
saveAll
@NonNull @Transactional public Iterable<D> saveAll(@NonNull Iterable<D> entities, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
saveAll
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findMinSortMember
@Nullable public com.broadleafcommerce.data.tracking.core.sort.domain.Sortable findMinSortMember(@NonNull com.broadleafcommerce.data.tracking.core.sort.domain.Sortable example, @Nullable String minSort, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
findMinSortMember
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findMaxSortMember
@Nullable public com.broadleafcommerce.data.tracking.core.sort.domain.Sortable findMaxSortMember(@NonNull com.broadleafcommerce.data.tracking.core.sort.domain.Sortable example, @Nullable String maxSort, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
findMaxSortMember
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findByContextId
@NonNull public Optional<D> findByContextId(@NonNull String contextId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
findByContextId
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findByContextIdAndCatalog
@NonNull public Optional<D> findByContextIdAndCatalog(@NonNull String contextId, @NonNull String catalogId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
findByContextIdAndCatalog
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
existsByContextId
public boolean existsByContextId(@NonNull String contextId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
existsByContextId
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
archive
@NonNull @Transactional public D archive(@NonNull D entity, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
archive
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findAll
@NonNull public List<D> findAll(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
findAll
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findAllByContextId
@NonNull public Iterable<D> findAllByContextId(@NonNull Iterable<String> contextIds, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
findAllByContextId
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findAll
@NonNull public org.springframework.data.domain.Page<D> findAll(@NonNull org.springframework.data.domain.Pageable pageable, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
findAll
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findAll
@NonNull public List<D> findAll(@NonNull org.springframework.data.domain.Sort sort, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
- Specified by:
findAll
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findAll
@NonNull public List<D> findAll(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, @NonNull Class<D> type)
- Specified by:
findAll
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findAll
@NonNull public org.springframework.data.domain.Page<D> findAll(@NonNull org.springframework.data.domain.Pageable pageable, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, @NonNull Class<D> type)
- Specified by:
findAll
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findAll
@NonNull public List<D> findAll(@NonNull org.springframework.data.domain.Sort sort, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, @NonNull Class<D> type)
- Specified by:
findAll
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
purgeObsoleteSandboxData
public void purgeObsoleteSandboxData(Duration beforeNow)
- Specified by:
purgeObsoleteSandboxData
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
pruneRestingNotificationStates
public void pruneRestingNotificationStates(@NonNull Duration beforeNow)
- Specified by:
pruneRestingNotificationStates
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
pruneChangeDetails
@Transactional(propagation=REQUIRES_NEW) public boolean pruneChangeDetails(@NonNull @NonNull @NonNull Object nativeId)
- Specified by:
pruneChangeDetails
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
setTrackableBehaviorUtil
public void setTrackableBehaviorUtil(com.broadleafcommerce.data.tracking.core.TrackableBehaviorUtil behaviorUtil)
- Specified by:
setTrackableBehaviorUtil
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
setCatalogFiltersCriteriaBuilder
public void setCatalogFiltersCriteriaBuilder(JpaFiltersCriteriaBuilder builder)
-
setJpaProperties
public void setJpaProperties(JpaProperties properties)
-
setRepositoryEntityTypeManager
public void setRepositoryEntityTypeManager(com.broadleafcommerce.common.jpa.RepositoryEntityTypeManager repositoryEntityTypeManager)
-
getTrackableBehaviorUtil
public com.broadleafcommerce.data.tracking.core.TrackableBehaviorUtil getTrackableBehaviorUtil()
- Specified by:
getTrackableBehaviorUtil
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
getTypesToRegisterInMappingContext
public List<Class<?>> getTypesToRegisterInMappingContext()
- Specified by:
getTypesToRegisterInMappingContext
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findByNativeId
@NonNull public Optional<D> findByNativeId(@NonNull @NonNull @NonNull Object id)
- Specified by:
findByNativeId
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findTarget
public D findTarget(String contextId, String catalogId, String applicationId, String author, String stage, String sandboxId, Integer level, Set<String> visibleFromCatalog)
- Specified by:
findTarget
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findOriginal
public D findOriginal(String contextId, String catalogId, String applicationId, String author, String stage, String sandboxId, Integer level)
- Specified by:
findOriginal
in interfacecom.broadleafcommerce.data.tracking.core.TrackableRepository<D extends com.broadleafcommerce.data.tracking.core.Trackable>
-
findAll
protected List<D> findAll(@Nullable javax.persistence.criteria.CriteriaQuery<D> query, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, Class<D> type, Map<String,Object> params)
Find all matching entities given a query.- Parameters:
query
- The fetch query to executecontextInfo
- Additional context information for the fetch - primarily used for narrowing.- Returns:
- the final query results, possibly narrowed via
JpaNarrowExecutor
.
-
-