修补实体并获取重复项



我在编辑实体时遇到问题。我有具有不同条件的对象规范。我遇到的问题与DimensionalConditions有关。

每当我编辑一个ObjectSpecification,它有"长度:1",我尝试添加"宽度:2

",条件最终是"长度:1,长度:1,宽度: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(这是一个很大的更新列表,请确保在进行任何修改之前合并ObjectSpecification使其与PersistenceContext对齐。

2( 您不考虑链接到ObjectSpecification的现有DimensionalCondition。您总是创建一个新的:

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

3( 确保将级联配置为至少在@OneToMany List<DimensionalCondition>{PERSIST, MERGE}

最新更新