diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractSetEntityToManyRelationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractSetEntityToManyRelationExecutor.java index b371df0399d092f769c760a46627ec6e1c88b218..6a93ae57149b842e55a6b60a5a733281afb45918 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractSetEntityToManyRelationExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractSetEntityToManyRelationExecutor.java @@ -17,6 +17,7 @@ package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity; import java.util.Collection; +import java.util.HashSet; import java.util.LinkedList; import java.util.Map; @@ -37,6 +38,8 @@ public abstract class AbstractSetEntityToManyRelationExecutor<ENTITY_CREATION, E public void set(IOperationContext context, Map<ENTITY_CREATION, ENTITY_PE> creationsMap, Map<RELATED_ID, RELATED_PE> relatedMap) { + Collection<RELATED_PE> allSet = new HashSet<RELATED_PE>(); + for (ENTITY_CREATION creation : creationsMap.keySet()) { ENTITY_PE entity = creationsMap.get(creation); @@ -54,9 +57,17 @@ public abstract class AbstractSetEntityToManyRelationExecutor<ENTITY_CREATION, E if (false == related.isEmpty()) { setRelated(context, entity, related); + allSet.addAll(related); } } } + + postSet(context, allSet); + } + + protected void postSet(IOperationContext context, Collection<RELATED_PE> allSet) + { + // by default do nothing } protected abstract Collection<? extends RELATED_ID> getRelatedIds(IOperationContext context, ENTITY_CREATION creation); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractUpdateEntityToManyRelationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractUpdateEntityToManyRelationExecutor.java index 07bbfbee4a65fc88311dadad64bc401d394f9fdb..51437f0c79b1cfa285d0e8248e343b4f4b4963a4 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractUpdateEntityToManyRelationExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractUpdateEntityToManyRelationExecutor.java @@ -48,6 +48,9 @@ public abstract class AbstractUpdateEntityToManyRelationExecutor<ENTITY_UPDATE, @Override public void update(IOperationContext context, Map<ENTITY_UPDATE, ENTITY_PE> entitiesMap, Map<RELATED_ID, RELATED_PE> relatedMap) { + Collection<RELATED_PE> allAdded = new HashSet<RELATED_PE>(); + Collection<RELATED_PE> allRemoved = new HashSet<RELATED_PE>(); + for (ENTITY_UPDATE update : entitiesMap.keySet()) { IdListUpdateValue<? extends RELATED_ID> listUpdate = getRelatedUpdate(context, update); @@ -74,10 +77,10 @@ public abstract class AbstractUpdateEntityToManyRelationExecutor<ENTITY_UPDATE, } if (action instanceof ListUpdateActionSet<?>) { - set(context, entity, relatedCollection); + set(context, entity, relatedCollection, allAdded, allRemoved); } else { - add(context, entity, relatedCollection); + add(context, entity, relatedCollection, allAdded); } } else if (action instanceof ListUpdateActionRemove<?>) { @@ -90,15 +93,23 @@ public abstract class AbstractUpdateEntityToManyRelationExecutor<ENTITY_UPDATE, check(context, entity, relatedId, related); } } - remove(context, entity, relatedCollection); + remove(context, entity, relatedCollection, allRemoved); } } } - } + + postUpdate(context, allAdded, allRemoved); + + } + + protected void postUpdate(IOperationContext context, Collection<RELATED_PE> allAdded, Collection<RELATED_PE> allRemoved) + { + // by default do nothing } - protected void set(IOperationContext context, ENTITY_PE entity, Collection<RELATED_PE> related) + protected void set(IOperationContext context, ENTITY_PE entity, Collection<RELATED_PE> related, Collection<RELATED_PE> allAdded, + Collection<RELATED_PE> allRemoved) { Set<RELATED_PE> existingRelated = new HashSet<RELATED_PE>(getCurrentlyRelated(entity)); Set<RELATED_PE> newRelated = new HashSet<RELATED_PE>(related); @@ -108,6 +119,7 @@ public abstract class AbstractUpdateEntityToManyRelationExecutor<ENTITY_UPDATE, if (false == newRelated.contains(anExistingRelated)) { remove(context, entity, anExistingRelated); + allRemoved.add(anExistingRelated); } } @@ -116,11 +128,12 @@ public abstract class AbstractUpdateEntityToManyRelationExecutor<ENTITY_UPDATE, if (false == existingRelated.contains(aNewRelated)) { add(context, entity, aNewRelated); + allAdded.add(aNewRelated); } } } - protected void add(IOperationContext context, ENTITY_PE entity, Collection<RELATED_PE> related) + protected void add(IOperationContext context, ENTITY_PE entity, Collection<RELATED_PE> related, Collection<RELATED_PE> allAdded) { Set<RELATED_PE> existingRelated = new HashSet<RELATED_PE>(getCurrentlyRelated(entity)); @@ -129,11 +142,12 @@ public abstract class AbstractUpdateEntityToManyRelationExecutor<ENTITY_UPDATE, if (false == existingRelated.contains(aRelated)) { add(context, entity, aRelated); + allAdded.add(aRelated); } } } - protected void remove(IOperationContext context, ENTITY_PE entity, Collection<RELATED_PE> related) + protected void remove(IOperationContext context, ENTITY_PE entity, Collection<RELATED_PE> related, Collection<RELATED_PE> allRemoved) { Set<RELATED_PE> existingRelated = new HashSet<RELATED_PE>(getCurrentlyRelated(entity)); @@ -142,6 +156,7 @@ public abstract class AbstractUpdateEntityToManyRelationExecutor<ENTITY_UPDATE, if (existingRelated.contains(aRelated)) { remove(context, entity, aRelated); + allRemoved.add(aRelated); } } } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/common/IReindexObjectExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/IReindexEntityExecutor.java similarity index 68% rename from openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/common/IReindexObjectExecutor.java rename to openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/IReindexEntityExecutor.java index e79b86cb1b089b906a40e30b19d603503cd3b1e5..743691b1f0d263fe0682fb9e7ce06a5aecfd8182 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/common/IReindexObjectExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/IReindexEntityExecutor.java @@ -14,19 +14,19 @@ * limitations under the License. */ -package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common; +package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity; import java.util.Collection; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext; -import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; +import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; /** * @author pkupczyk */ -public interface IReindexObjectExecutor +public interface IReindexEntityExecutor { - <T extends IIdHolder> void reindex(IOperationContext context, Class<T> objectClass, Collection<T> objects); + <T extends IEntityInformationWithPropertiesHolder> void reindex(IOperationContext context, Class<T> objectClass, Collection<T> objects); } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/common/ReindexObjectExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/ReindexEntityExecutor.java similarity index 64% rename from openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/common/ReindexObjectExecutor.java rename to openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/ReindexEntityExecutor.java index dd3310461097253845f3988d9ee21fa078f9af1c..968ca40d7d2152b4e772aca42651773b2e426fdc 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/common/ReindexObjectExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/ReindexEntityExecutor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common; +package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity; import java.util.ArrayList; import java.util.Collection; @@ -24,25 +24,26 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.DynamicPropertyEvaluationOperation; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDynamicPropertyEvaluationScheduler; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; +import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; /** * @author pkupczyk */ @Component -public class ReindexObjectExecutor implements IReindexObjectExecutor +public class ReindexEntityExecutor implements IReindexEntityExecutor { @Autowired private IDAOFactory daoFactory; @Override - public <T extends IIdHolder> void reindex(IOperationContext context, Class<T> objectClass, Collection<T> objects) + public <T extends IEntityInformationWithPropertiesHolder> void reindex(IOperationContext context, Class<T> objectClass, Collection<T> objects) { - IFullTextIndexUpdateScheduler indexUpdater = daoFactory.getPersistencyResources().getIndexUpdateScheduler(); + IDynamicPropertyEvaluationScheduler indexUpdater = daoFactory.getPersistencyResources().getDynamicPropertyEvaluationScheduler(); List<Long> objectIds = new ArrayList<Long>(); for (IIdHolder object : objects) @@ -55,7 +56,7 @@ public class ReindexObjectExecutor implements IReindexObjectExecutor if (false == objectIds.isEmpty()) { - indexUpdater.scheduleUpdate(IndexUpdateOperation.reindex(objectClass, objectIds)); + indexUpdater.scheduleUpdate(DynamicPropertyEvaluationOperation.evaluate(objectClass, objectIds)); } } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleExperimentExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleExperimentExecutor.java index b571e814469032e46142fadd9280cc95cdff57de..266300706c972830398acec082f1b083731b938b 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleExperimentExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleExperimentExecutor.java @@ -32,7 +32,6 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractUpdat import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.experiment.IMapExperimentByIdExecutor; import ch.systemsx.cisd.openbis.generic.server.authorization.validator.ExperimentByIdentiferValidator; import ch.systemsx.cisd.openbis.generic.server.business.bo.NewDataSetToSampleExperimentAssignmentManager; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; @@ -52,9 +51,6 @@ public class UpdateSampleExperimentExecutor extends @Autowired private IVerifySampleDataSetsExecutor verifySampleDataSetsExecutor; - @Autowired - private IDAOFactory daoFactory; - @Override protected IExperimentId getRelatedId(ExperimentPE related) { diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/DeleteTagExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/DeleteTagExecutor.java index 5961d9701bccf2892360dad3948cc45078a8520a..95e2663af728a8c243132c3fb0877fc78d322684 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/DeleteTagExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/DeleteTagExecutor.java @@ -17,8 +17,10 @@ package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.tag; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -27,10 +29,16 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.tag.deletion.TagDeletionOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.tag.id.ITagId; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractDeleteEntityExecutor; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.IReindexEntityExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.tag.TagAuthorization; import ch.systemsx.cisd.openbis.generic.server.business.bo.IMetaprojectBO; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.id.metaproject.MetaprojectTechIdId; +import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectAssignmentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; /** * @author pkupczyk @@ -43,6 +51,9 @@ public class DeleteTagExecutor extends AbstractDeleteEntityExecutor<Void, ITagId @Autowired private IMapTagByIdExecutor mapTagByIdExecutor; + @Autowired + private IReindexEntityExecutor reindexObjectExecutor; + @Override protected Map<ITagId, MetaprojectPE> map(IOperationContext context, List<? extends ITagId> entityIds) { @@ -64,12 +75,44 @@ public class DeleteTagExecutor extends AbstractDeleteEntityExecutor<Void, ITagId @Override protected Void delete(IOperationContext context, Collection<MetaprojectPE> tags, TagDeletionOptions deletionOptions) { + Collection<ExperimentPE> experiments = new HashSet<ExperimentPE>(); + Collection<SamplePE> samples = new HashSet<SamplePE>(); + Collection<DataPE> dataSets = new HashSet<DataPE>(); + Collection<MaterialPE> materials = new HashSet<MaterialPE>(); + for (MetaprojectPE tag : tags) { + Set<MetaprojectAssignmentPE> assignments = tag.getAssignments(); + + if (assignments != null) + { + for (MetaprojectAssignmentPE assignment : assignments) + { + if (assignment.getExperiment() != null) + { + experiments.add(assignment.getExperiment()); + } else if (assignment.getSample() != null) + { + samples.add(assignment.getSample()); + } else if (assignment.getDataSet() != null) + { + dataSets.add(assignment.getDataSet()); + } else if (assignment.getMaterial() != null) + { + materials.add(assignment.getMaterial()); + } + } + } + IMetaprojectBO metaprojectBO = businessObjectFactory.createMetaprojectBO(context.getSession()); metaprojectBO.deleteByMetaprojectId(new MetaprojectTechIdId(tag.getId()), deletionOptions.getReason()); } + reindexObjectExecutor.reindex(context, ExperimentPE.class, experiments); + reindexObjectExecutor.reindex(context, SamplePE.class, samples); + reindexObjectExecutor.reindex(context, DataPE.class, dataSets); + reindexObjectExecutor.reindex(context, MaterialPE.class, materials); + return null; } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/SetTagEntitiesWithCacheExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/SetTagEntitiesWithCacheExecutor.java index 8c05dfef99fd016dad43828954883fff89099c3c..5db295fa76923f1eef1ea878b1cbfab95bc2b0dd 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/SetTagEntitiesWithCacheExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/SetTagEntitiesWithCacheExecutor.java @@ -17,7 +17,6 @@ package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.tag; import java.util.Collection; -import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -25,9 +24,9 @@ import org.springframework.stereotype.Component; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.IObjectId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.tag.create.TagCreation; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext; -import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.IReindexObjectExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractSetEntityToManyRelationExecutor; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.IReindexEntityExecutor; +import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityWithMetaprojects; import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE; @@ -35,26 +34,19 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE; * @author pkupczyk */ @Component -public abstract class SetTagEntitiesWithCacheExecutor<RELATED_ID extends IObjectId, RELATED_PE extends IEntityWithMetaprojects> +public abstract class SetTagEntitiesWithCacheExecutor<RELATED_ID extends IObjectId, RELATED_PE extends IEntityWithMetaprojects & IEntityInformationWithPropertiesHolder> extends AbstractSetEntityToManyRelationExecutor<TagCreation, MetaprojectPE, RELATED_ID, RELATED_PE> { @Autowired - private IDAOFactory daoFactory; - - @Autowired - private IReindexObjectExecutor reindexObjectExecutor; + private IReindexEntityExecutor reindexObjectExecutor; protected abstract Class<RELATED_PE> getRelatedClass(); @Override - public void set(IOperationContext context, Map<TagCreation, MetaprojectPE> creationsMap, Map<RELATED_ID, RELATED_PE> relatedMap) + protected void postSet(IOperationContext context, Collection<RELATED_PE> allSet) { - super.set(context, creationsMap, relatedMap); - - daoFactory.getSessionFactory().getCurrentSession().flush(); - - reindexObjectExecutor.reindex(context, getRelatedClass(), relatedMap.values()); + reindexObjectExecutor.reindex(context, getRelatedClass(), allSet); } @Override diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/UpdateTagEntitiesWithCacheExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/UpdateTagEntitiesWithCacheExecutor.java index 5a5680ce56388c65b40d86cdf4353cb9aefbd928..67b62520376b66602c19466755d72565ee0596c1 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/UpdateTagEntitiesWithCacheExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/UpdateTagEntitiesWithCacheExecutor.java @@ -18,16 +18,16 @@ package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.tag; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; -import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import ch.ethz.sis.openbis.generic.asapi.v3.dto.tag.update.TagUpdate; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext; -import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.IReindexObjectExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractUpdateEntityToManyRelationExecutor; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.IReindexEntityExecutor; +import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityWithMetaprojects; import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectAssignmentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE; @@ -35,28 +35,25 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE; /** * @author pkupczyk */ -public abstract class UpdateTagEntitiesWithCacheExecutor<RELATED_ID, RELATED_PE extends IEntityWithMetaprojects> +public abstract class UpdateTagEntitiesWithCacheExecutor<RELATED_ID, RELATED_PE extends IEntityWithMetaprojects & IEntityInformationWithPropertiesHolder> extends AbstractUpdateEntityToManyRelationExecutor<TagUpdate, MetaprojectPE, RELATED_ID, RELATED_PE> { @Autowired - private IDAOFactory daoFactory; - - @Autowired - private IReindexObjectExecutor reindexObjectExecutor; + private IReindexEntityExecutor reindexObjectExecutor; protected abstract Class<RELATED_PE> getRelatedClass(); protected abstract RELATED_PE getCurrentlyRelated(MetaprojectAssignmentPE entity); @Override - public void update(IOperationContext context, Map<TagUpdate, MetaprojectPE> entitiesMap, Map<RELATED_ID, RELATED_PE> relatedMap) + protected void postUpdate(IOperationContext context, Collection<RELATED_PE> allAdded, Collection<RELATED_PE> allRemoved) { - super.update(context, entitiesMap, relatedMap); - - daoFactory.getSessionFactory().getCurrentSession().flush(); + Collection<RELATED_PE> entitiesToReindex = new HashSet<RELATED_PE>(); + entitiesToReindex.addAll(allAdded); + entitiesToReindex.addAll(allRemoved); - reindexObjectExecutor.reindex(context, getRelatedClass(), relatedMap.values()); + reindexObjectExecutor.reindex(context, getRelatedClass(), entitiesToReindex); } @Override