Fix on deleting duplicates from DmpDescriptionTemplates, delete all but one

This commit is contained in:
Thomas Georgios Giannos 2023-11-24 17:19:20 +02:00
parent 8ee149f094
commit ccd650217b
1 changed files with 9 additions and 15 deletions

View File

@ -1,35 +1,23 @@
package eu.old.eudat.migration; package eu.old.eudat.migration;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.JsonProcessingException;
import eu.eudat.commons.JsonHandlingService; import eu.eudat.commons.JsonHandlingService;
import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.XmlHandlingService;
import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.enums.IsActive;
import eu.eudat.commons.enums.ReferenceFieldDataType;
import eu.eudat.commons.enums.ReferenceSourceType;
import eu.eudat.commons.enums.ReferenceType;
import eu.eudat.commons.types.reference.FieldEntity;
import eu.eudat.data.DescriptionTemplateEntity;
import eu.eudat.data.DmpBlueprintEntity; import eu.eudat.data.DmpBlueprintEntity;
import eu.eudat.data.DmpDescriptionTemplateEntity; import eu.eudat.data.DmpDescriptionTemplateEntity;
import eu.eudat.data.ReferenceEntity;
import eu.eudat.model.DmpBlueprint;
import eu.eudat.query.DescriptionTemplateQuery;
import eu.eudat.query.DmpBlueprintQuery; import eu.eudat.query.DmpBlueprintQuery;
import eu.eudat.query.DmpDescriptionTemplateQuery; import eu.eudat.query.DmpDescriptionTemplateQuery;
import eu.old.eudat.data.dao.entities.DmpDatasetProfileDao; import eu.old.eudat.data.dao.entities.DmpDatasetProfileDao;
import eu.old.eudat.data.dao.entities.ResearcherDao;
import eu.old.eudat.data.entities.DMPDatasetProfile; import eu.old.eudat.data.entities.DMPDatasetProfile;
import eu.old.eudat.data.entities.Researcher;
import eu.old.eudat.logic.services.operations.DatabaseRepository; import eu.old.eudat.logic.services.operations.DatabaseRepository;
import eu.old.eudat.queryable.QueryableList;
import gr.cite.tools.data.query.Paging;
import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.data.query.QueryFactory;
import gr.cite.tools.exception.MyApplicationException; import gr.cite.tools.exception.MyApplicationException;
import gr.cite.tools.logging.LoggerService; import gr.cite.tools.logging.LoggerService;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import jakarta.persistence.Tuple; import jakarta.persistence.Tuple;
import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaDelete;
import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root; import jakarta.persistence.criteria.Root;
import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.JAXBException;
@ -40,6 +28,7 @@ import eu.eudat.commons.types.dmpblueprint.DefinitionEntity;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException; import java.io.IOException;
import java.security.SecureRandom;
import java.time.Instant; import java.time.Instant;
import java.util.*; import java.util.*;
@ -144,6 +133,8 @@ public class DmpDatasetProfileMigrationService {
List<Tuple> resultList = this.entityManager.createQuery(criteria).getResultList(); List<Tuple> resultList = this.entityManager.createQuery(criteria).getResultList();
List<Tuple> duplicatesList = resultList.stream().filter(x -> (long) x.get(3) > 1).toList(); List<Tuple> duplicatesList = resultList.stream().filter(x -> (long) x.get(3) > 1).toList();
CriteriaDelete<DmpDescriptionTemplateEntity> delete = b.createCriteriaDelete(DmpDescriptionTemplateEntity.class);
Root<DmpDescriptionTemplateEntity> root1 = delete.from(DmpDescriptionTemplateEntity.class);
for (Tuple duplicate : duplicatesList) { for (Tuple duplicate : duplicatesList) {
List<DmpDescriptionTemplateEntity> duplicateEntities = dmpDescriptionTemplateQuery List<DmpDescriptionTemplateEntity> duplicateEntities = dmpDescriptionTemplateQuery
.dmpIds((UUID) duplicate.get(0)) .dmpIds((UUID) duplicate.get(0))
@ -151,8 +142,11 @@ public class DmpDatasetProfileMigrationService {
.sectionIds((UUID) duplicate.get(2)) .sectionIds((UUID) duplicate.get(2))
.collect(); .collect();
for (int index = 0; index < duplicateEntities.size() - 1; index++) List<UUID> toDelete = new ArrayList<>(duplicateEntities.stream().map(DmpDescriptionTemplateEntity::getId).toList());
this.entityManager.remove(duplicateEntities.get(index)); int random = new SecureRandom().nextInt(0, toDelete.size());
toDelete.remove(random);
delete.where(root1.get("id").in(toDelete));
this.entityManager.createQuery(delete).executeUpdate();
} }
entityManager.flush(); entityManager.flush();