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
This commit is contained in:
2025-08-19 00:15:51 +03:00
parent 47959fb35f
commit 82f86a62ca

View File

@@ -31,10 +31,10 @@ public class DataCenterMapper extends BaseCreateUpdateMapper<DataCenter, DataCen
private final ActivitySubUnitService activitySubUnitService; private final ActivitySubUnitService activitySubUnitService;
@Autowired @Autowired
public DataCenterMapper(AreaService areaService, SectorService sectorService, public DataCenterMapper(AreaService areaService, SectorService sectorService,
SubSectorService subSectorService, EmissionSourceService emissionSourceService, SubSectorService subSectorService, EmissionSourceService emissionSourceService,
EmissionScopeService emissionScopeService, ConsuptionUnitService consuptionUnitService, EmissionScopeService emissionScopeService, ConsuptionUnitService consuptionUnitService,
ActivitySubUnitService activitySubUnitService) { ActivitySubUnitService activitySubUnitService) {
this.areaService = areaService; this.areaService = areaService;
this.sectorService = sectorService; this.sectorService = sectorService;
this.subSectorService = subSectorService; this.subSectorService = subSectorService;
@@ -47,68 +47,71 @@ public class DataCenterMapper extends BaseCreateUpdateMapper<DataCenter, DataCen
@Override @Override
public DataCenter toEntity(DataCenterCreateInput input) { public DataCenter toEntity(DataCenterCreateInput input) {
DataCenter entity = new DataCenter(); DataCenter entity = new DataCenter();
// Basic fields // Basic fields
entity.setDataCenter(input.getDataCenter()); entity.setDataCenter(input.getDataCenter());
entity.setExternalId(input.getExternalId()); entity.setExternalId(input.getExternalId());
entity.setNumber(input.getNumber()); entity.setNumber(input.getNumber());
entity.setConsuptionAmount(input.getConsuptionAmount()); entity.setConsuptionAmount(input.getConsuptionAmount());
// Convert ID references to entities // Convert ID references to entities
if (input.getAreaId() != null) { if (input.getAreaId() != null) {
entity.setArea(areaService.findById(input.getAreaId()).orElse(null)); entity.setArea(areaService.findById(input.getAreaId()).orElse(null));
} }
if (input.getSectorId() != null) { if (input.getSectorId() != null) {
entity.setSector(sectorService.findById(input.getSectorId()).orElse(null)); entity.setSector(sectorService.findById(input.getSectorId()).orElse(null));
} }
if (input.getSubSectorId() != null) { if (input.getSubSectorId() != null) {
entity.setSubSector(subSectorService.findById(input.getSubSectorId()).orElse(null)); entity.setSubSector(subSectorService.findById(input.getSubSectorId()).orElse(null));
} }
if (input.getEmissionScopeId() != null) { if (input.getEmissionScopeId() != null) {
entity.setEmissionScope(emissionScopeService.findById(input.getEmissionScopeId()).orElse(null)); entity.setEmissionScope(emissionScopeService.findById(input.getEmissionScopeId()).orElse(null));
} }
if (input.getActivitySubUnitId() != null) { if (input.getActivitySubUnitId() != null) {
entity.setActivitySubUnit(activitySubUnitService.findById(input.getActivitySubUnitId()).orElse(null)); entity.setActivitySubUnit(activitySubUnitService.findById(input.getActivitySubUnitId()).orElse(null));
} }
// New attributes // New attributes
entity.setAyposURL(input.getAyposURL()); entity.setAyposURL(input.getAyposURL());
entity.setAddress(input.getAddress()); entity.setAddress(input.getAddress());
entity.setLatitude(input.getLatitude()); entity.setLatitude(input.getLatitude());
entity.setLongitude(input.getLongitude()); entity.setLongitude(input.getLongitude());
// Handle multiple emission sources if provided // Handle multiple emission sources if provided
if (input.getDataCenterEmissionSources() != null && !input.getDataCenterEmissionSources().isEmpty()) { if (input.getDataCenterEmissionSources() != null && !input.getDataCenterEmissionSources().isEmpty()) {
List<DataCenterEmissionSource> dataCenterEmissionSources = new ArrayList<>(); List<DataCenterEmissionSource> dataCenterEmissionSources = new ArrayList<>();
for (DataCenterEmissionSourceInput emissionSourceInput : input.getDataCenterEmissionSources()) { for (DataCenterEmissionSourceInput emissionSourceInput : input.getDataCenterEmissionSources()) {
DataCenterEmissionSource dcEmissionSource = new DataCenterEmissionSource(); DataCenterEmissionSource dcEmissionSource = new DataCenterEmissionSource();
dcEmissionSource.setDataCenter(entity); dcEmissionSource.setDataCenter(entity);
// Set EmissionSource // Set EmissionSource
if (emissionSourceInput.getEmissionSourceId() != null) { 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 // Set ConsuptionUnit
if (emissionSourceInput.getConsuptionUnitId() != 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));
} }
// Set optional fields // Set optional fields
dcEmissionSource.setIsDefault(emissionSourceInput.getIsDefault() != null ? emissionSourceInput.getIsDefault() : false); dcEmissionSource.setIsDefault(
emissionSourceInput.getIsDefault() != null ? emissionSourceInput.getIsDefault() : false);
dcEmissionSource.setPercentage(emissionSourceInput.getPercentage()); dcEmissionSource.setPercentage(emissionSourceInput.getPercentage());
dataCenterEmissionSources.add(dcEmissionSource); dataCenterEmissionSources.add(dcEmissionSource);
} }
entity.setDataCenterEmissionSources(dataCenterEmissionSources); entity.setDataCenterEmissionSources(dataCenterEmissionSources);
} }
return entity; return entity;
} }
@@ -118,83 +121,86 @@ public class DataCenterMapper extends BaseCreateUpdateMapper<DataCenter, DataCen
if (input.getDataCenter() != null) { if (input.getDataCenter() != null) {
entity.setDataCenter(input.getDataCenter()); entity.setDataCenter(input.getDataCenter());
} }
if (input.getExternalId() != null) { if (input.getExternalId() != null) {
entity.setExternalId(input.getExternalId()); entity.setExternalId(input.getExternalId());
} }
if (input.getNumber() != null) { if (input.getNumber() != null) {
entity.setNumber(input.getNumber()); entity.setNumber(input.getNumber());
} }
if (input.getConsuptionAmount() != null) { if (input.getConsuptionAmount() != null) {
entity.setConsuptionAmount(input.getConsuptionAmount()); entity.setConsuptionAmount(input.getConsuptionAmount());
} }
// Update relationships only if provided // Update relationships only if provided
if (input.getAreaId() != null) { if (input.getAreaId() != null) {
entity.setArea(areaService.findById(input.getAreaId()).orElse(null)); entity.setArea(areaService.findById(input.getAreaId()).orElse(null));
} }
if (input.getSectorId() != null) { if (input.getSectorId() != null) {
entity.setSector(sectorService.findById(input.getSectorId()).orElse(null)); entity.setSector(sectorService.findById(input.getSectorId()).orElse(null));
} }
if (input.getSubSectorId() != null) { if (input.getSubSectorId() != null) {
entity.setSubSector(subSectorService.findById(input.getSubSectorId()).orElse(null)); entity.setSubSector(subSectorService.findById(input.getSubSectorId()).orElse(null));
} }
if (input.getEmissionScopeId() != null) { if (input.getEmissionScopeId() != null) {
entity.setEmissionScope(emissionScopeService.findById(input.getEmissionScopeId()).orElse(null)); entity.setEmissionScope(emissionScopeService.findById(input.getEmissionScopeId()).orElse(null));
} }
if (input.getActivitySubUnitId() != null) { if (input.getActivitySubUnitId() != null) {
entity.setActivitySubUnit(activitySubUnitService.findById(input.getActivitySubUnitId()).orElse(null)); entity.setActivitySubUnit(activitySubUnitService.findById(input.getActivitySubUnitId()).orElse(null));
} }
// Handle multiple emission sources update if provided // Handle multiple emission sources update if provided
if (input.getDataCenterEmissionSources() != null) { if (input.getDataCenterEmissionSources() != null) {
// Clear existing emission sources and add new ones // Clear existing emission sources from the managed collection
entity.getDataCenterEmissionSources().clear(); entity.getDataCenterEmissionSources().clear();
List<DataCenterEmissionSource> dataCenterEmissionSources = new ArrayList<>(); // Add new emission sources to the same managed collection
for (DataCenterEmissionSourceInput emissionSourceInput : input.getDataCenterEmissionSources()) { for (DataCenterEmissionSourceInput emissionSourceInput : input.getDataCenterEmissionSources()) {
DataCenterEmissionSource dcEmissionSource = new DataCenterEmissionSource(); DataCenterEmissionSource dcEmissionSource = new DataCenterEmissionSource();
dcEmissionSource.setDataCenter(entity); dcEmissionSource.setDataCenter(entity);
if (emissionSourceInput.getEmissionSourceId() != null) { 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) { 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()); 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) // New attributes (partial update - only if provided)
if (input.getAyposURL() != null) { if (input.getAyposURL() != null) {
entity.setAyposURL(input.getAyposURL()); entity.setAyposURL(input.getAyposURL());
} }
if (input.getAddress() != null) { if (input.getAddress() != null) {
entity.setAddress(input.getAddress()); entity.setAddress(input.getAddress());
} }
if (input.getLatitude() != null) { if (input.getLatitude() != null) {
entity.setLatitude(input.getLatitude()); entity.setLatitude(input.getLatitude());
} }
if (input.getLongitude() != null) { if (input.getLongitude() != null) {
entity.setLongitude(input.getLongitude()); entity.setLongitude(input.getLongitude());
} }
return entity; return entity;
} }
} }