Исправление сущности и получение дубликатов - PullRequest
0 голосов
/ 30 мая 2019

У меня проблемы с редактированием объекта. У меня есть ObjectSpecification, которые имеют разные условия. Проблема, которую я имею, связана с DimensionalConditions.

Всякий раз, когда я редактирую ObjectSpecification, который имеет, скажем, "length: 1", и я пытаюсь добавить к нему "width: 2", условия заканчиваются на "length: 1, length: 1, width: 2".

Короче говоря, условия, которые присутствовали раньше, вставляются снова по какой-то причине.

public ObjectSpecification modifySpecification(Long id, ObjectSpecificationRequest request) {
        ObjectSpecification objectSpecification = this.getObjectSpecificationById(id);
        return this.setSpecData(request, objectSpecification);
    }

public ObjectSpecification createSpecification(ObjectSpecificationRequest request){
        return this.setSpecData(request, new ObjectSpecification());
    }

public void deleteSpecification(Long id) {
        objectSpecificationRepository.delete(getObjectSpecificationById(id));
    }

public ObjectSpecification setSpecData(ObjectSpecificationRequest request, ObjectSpecification objectSpecification) {
        if (request.getName() != null) {
            objectSpecification.setName(request.getName());
        }

        if (request.getDimensionalConditions() != null) {
            List<DimensionalCondition> dimensionalConditions = new ArrayList<>();
            for (DimensionalCondition condition:request.getDimensionalConditions()) {
                DimensionalCondition dimensionalCondition = new DimensionalCondition();
                dimensionalCondition.setConditionType(condition.getConditionType());
                dimensionalCondition.setValue(condition.getValue());
                dimensionalCondition.setObjectSpecification(objectSpecification);
                dimensionalConditions.add(dimensionalCondition);
            }
            objectSpecification.setDimensionalConditions(dimensionalConditions);
        }

        if (request.getMechanisms() != null) {
            objectSpecification.setMechanismConditions(request.getMechanisms());
        }

        if (request.getServices() != null) {
            objectSpecification.setServiceConditions(request.getServices());
        }

        if (request.getWorkDetails() != null) {
            List<WorkDetail> workDetails = new ArrayList<>();
            for (WorkDetail workDetail:request.getWorkDetails()) {
                workDetails.add(workDetailService.getWorkDetailById(workDetail.getId()));
            }
            objectSpecification.setWorkDetailConditions(workDetails);
        }

        return objectSpecificationRepository.save(objectSpecification);
    }

1 Ответ

1 голос
/ 30 мая 2019

1) Это большой список обновлений, убедитесь, что вы объединили свой ObjectSpecification так, чтобы он выровнялся с PersistenceContext, прежде чем вносить какие-либо изменения.

2) Вы не учитываете существующие DimensionalCondition, связанные с ObjectSpecification. Вы всегда создаете новый:

List<DimensionalCondition> dimensionalConditions = new ArrayList<>();

3) Убедитесь, что каскадирование настроено на {PERSIST, MERGE} как минимум на @OneToMany List<DimensionalCondition>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...