forked from Abdulbari/sgeUpdated
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:
@@ -31,10 +31,10 @@ public class DataCenterMapper extends BaseCreateUpdateMapper<DataCenter, DataCen
|
||||
private final ActivitySubUnitService activitySubUnitService;
|
||||
|
||||
@Autowired
|
||||
public DataCenterMapper(AreaService areaService, SectorService sectorService,
|
||||
SubSectorService subSectorService, EmissionSourceService emissionSourceService,
|
||||
EmissionScopeService emissionScopeService, ConsuptionUnitService consuptionUnitService,
|
||||
ActivitySubUnitService activitySubUnitService) {
|
||||
public DataCenterMapper(AreaService areaService, SectorService sectorService,
|
||||
SubSectorService subSectorService, EmissionSourceService emissionSourceService,
|
||||
EmissionScopeService emissionScopeService, ConsuptionUnitService consuptionUnitService,
|
||||
ActivitySubUnitService activitySubUnitService) {
|
||||
this.areaService = areaService;
|
||||
this.sectorService = sectorService;
|
||||
this.subSectorService = subSectorService;
|
||||
@@ -47,68 +47,71 @@ public class DataCenterMapper extends BaseCreateUpdateMapper<DataCenter, DataCen
|
||||
@Override
|
||||
public DataCenter toEntity(DataCenterCreateInput input) {
|
||||
DataCenter entity = new DataCenter();
|
||||
|
||||
|
||||
// Basic fields
|
||||
entity.setDataCenter(input.getDataCenter());
|
||||
entity.setExternalId(input.getExternalId());
|
||||
entity.setNumber(input.getNumber());
|
||||
entity.setConsuptionAmount(input.getConsuptionAmount());
|
||||
|
||||
|
||||
// Convert ID references to entities
|
||||
if (input.getAreaId() != null) {
|
||||
entity.setArea(areaService.findById(input.getAreaId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
if (input.getSectorId() != null) {
|
||||
entity.setSector(sectorService.findById(input.getSectorId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
if (input.getSubSectorId() != null) {
|
||||
entity.setSubSector(subSectorService.findById(input.getSubSectorId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
if (input.getEmissionScopeId() != null) {
|
||||
entity.setEmissionScope(emissionScopeService.findById(input.getEmissionScopeId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
if (input.getActivitySubUnitId() != null) {
|
||||
entity.setActivitySubUnit(activitySubUnitService.findById(input.getActivitySubUnitId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
// New attributes
|
||||
entity.setAyposURL(input.getAyposURL());
|
||||
entity.setAddress(input.getAddress());
|
||||
entity.setLatitude(input.getLatitude());
|
||||
entity.setLongitude(input.getLongitude());
|
||||
|
||||
|
||||
// Handle multiple emission sources if provided
|
||||
if (input.getDataCenterEmissionSources() != null && !input.getDataCenterEmissionSources().isEmpty()) {
|
||||
List<DataCenterEmissionSource> 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<DataCenter, DataCen
|
||||
if (input.getDataCenter() != null) {
|
||||
entity.setDataCenter(input.getDataCenter());
|
||||
}
|
||||
|
||||
|
||||
if (input.getExternalId() != null) {
|
||||
entity.setExternalId(input.getExternalId());
|
||||
}
|
||||
|
||||
|
||||
if (input.getNumber() != null) {
|
||||
entity.setNumber(input.getNumber());
|
||||
}
|
||||
|
||||
|
||||
if (input.getConsuptionAmount() != null) {
|
||||
entity.setConsuptionAmount(input.getConsuptionAmount());
|
||||
}
|
||||
|
||||
|
||||
// Update relationships only if provided
|
||||
if (input.getAreaId() != null) {
|
||||
entity.setArea(areaService.findById(input.getAreaId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
if (input.getSectorId() != null) {
|
||||
entity.setSector(sectorService.findById(input.getSectorId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
if (input.getSubSectorId() != null) {
|
||||
entity.setSubSector(subSectorService.findById(input.getSubSectorId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
if (input.getEmissionScopeId() != null) {
|
||||
entity.setEmissionScope(emissionScopeService.findById(input.getEmissionScopeId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
if (input.getActivitySubUnitId() != null) {
|
||||
entity.setActivitySubUnit(activitySubUnitService.findById(input.getActivitySubUnitId()).orElse(null));
|
||||
}
|
||||
|
||||
|
||||
// Handle multiple emission sources update if provided
|
||||
if (input.getDataCenterEmissionSources() != null) {
|
||||
// Clear existing emission sources and add new ones
|
||||
// Clear existing emission sources from the managed collection
|
||||
entity.getDataCenterEmissionSources().clear();
|
||||
|
||||
List<DataCenterEmissionSource> 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user