From 82f86a62cae64e63b481365e9177f6460139e449 Mon Sep 17 00:00:00 2001 From: Khaled Elagamy Date: Tue, 19 Aug 2025 00:15:51 +0300 Subject: [PATCH] Fix issue in updating datacenter Found a hibernate cascade issue and was fixed by reuse the existing collection instaed of creating a new one in updating the datacenter entity --- .../mutation/mapper/DataCenterMapper.java | 102 +++++++++--------- 1 file changed, 54 insertions(+), 48 deletions(-) diff --git a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/mapper/DataCenterMapper.java b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/mapper/DataCenterMapper.java index 1419cf2..f40b1fb 100644 --- a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/mapper/DataCenterMapper.java +++ b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/mapper/DataCenterMapper.java @@ -31,10 +31,10 @@ public class DataCenterMapper extends BaseCreateUpdateMapper dataCenterEmissionSources = new ArrayList<>(); - + for (DataCenterEmissionSourceInput emissionSourceInput : input.getDataCenterEmissionSources()) { DataCenterEmissionSource dcEmissionSource = new DataCenterEmissionSource(); dcEmissionSource.setDataCenter(entity); - + // Set EmissionSource if (emissionSourceInput.getEmissionSourceId() != null) { - dcEmissionSource.setEmissionSource(emissionSourceService.findById(UUID.fromString(emissionSourceInput.getEmissionSourceId())).orElse(null)); + dcEmissionSource.setEmissionSource(emissionSourceService + .findById(UUID.fromString(emissionSourceInput.getEmissionSourceId())).orElse(null)); } - + // Set ConsuptionUnit if (emissionSourceInput.getConsuptionUnitId() != null) { - dcEmissionSource.setConsuptionUnit(consuptionUnitService.findById(UUID.fromString(emissionSourceInput.getConsuptionUnitId())).orElse(null)); + dcEmissionSource.setConsuptionUnit(consuptionUnitService + .findById(UUID.fromString(emissionSourceInput.getConsuptionUnitId())).orElse(null)); } - + // Set optional fields - dcEmissionSource.setIsDefault(emissionSourceInput.getIsDefault() != null ? emissionSourceInput.getIsDefault() : false); + dcEmissionSource.setIsDefault( + emissionSourceInput.getIsDefault() != null ? emissionSourceInput.getIsDefault() : false); dcEmissionSource.setPercentage(emissionSourceInput.getPercentage()); - + dataCenterEmissionSources.add(dcEmissionSource); } - + entity.setDataCenterEmissionSources(dataCenterEmissionSources); } - + return entity; } @@ -118,83 +121,86 @@ public class DataCenterMapper extends BaseCreateUpdateMapper dataCenterEmissionSources = new ArrayList<>(); + + // Add new emission sources to the same managed collection for (DataCenterEmissionSourceInput emissionSourceInput : input.getDataCenterEmissionSources()) { DataCenterEmissionSource dcEmissionSource = new DataCenterEmissionSource(); dcEmissionSource.setDataCenter(entity); - + if (emissionSourceInput.getEmissionSourceId() != null) { - dcEmissionSource.setEmissionSource(emissionSourceService.findById(UUID.fromString(emissionSourceInput.getEmissionSourceId())).orElse(null)); + dcEmissionSource.setEmissionSource(emissionSourceService + .findById(UUID.fromString(emissionSourceInput.getEmissionSourceId())).orElse(null)); } - + if (emissionSourceInput.getConsuptionUnitId() != null) { - dcEmissionSource.setConsuptionUnit(consuptionUnitService.findById(UUID.fromString(emissionSourceInput.getConsuptionUnitId())).orElse(null)); + dcEmissionSource.setConsuptionUnit(consuptionUnitService + .findById(UUID.fromString(emissionSourceInput.getConsuptionUnitId())).orElse(null)); } - - dcEmissionSource.setIsDefault(emissionSourceInput.getIsDefault() != null ? emissionSourceInput.getIsDefault() : false); + + dcEmissionSource.setIsDefault( + emissionSourceInput.getIsDefault() != null ? emissionSourceInput.getIsDefault() : false); dcEmissionSource.setPercentage(emissionSourceInput.getPercentage()); - - dataCenterEmissionSources.add(dcEmissionSource); + + // Add to the existing managed collection instead of creating a new one + entity.getDataCenterEmissionSources().add(dcEmissionSource); } - entity.setDataCenterEmissionSources(dataCenterEmissionSources); } - + // New attributes (partial update - only if provided) if (input.getAyposURL() != null) { entity.setAyposURL(input.getAyposURL()); } - + if (input.getAddress() != null) { entity.setAddress(input.getAddress()); } - + if (input.getLatitude() != null) { entity.setLatitude(input.getLatitude()); } - + if (input.getLongitude() != null) { entity.setLongitude(input.getLongitude()); } - + return entity; } } \ No newline at end of file