ModelMapper не игнорирует нулевые значения - PullRequest
0 голосов
/ 29 мая 2019

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

Я пробовал это, но не повезло:

    @Bean
    public ModelMapper modelMapper() {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());
        modelMapper.createTypeMap(String.class, Date.class);
        modelMapper.addConverter(new StringToDate());
        modelMapper.addConverter(new DateToString());
        return modelMapper;
    }

Затем я обновляю свой объект так:

    @Override
    public void editUser(final User user) {
        UserDocument userDocument = this.usersRepository.findByIdAndActivo(user.getId(), true)
                .orElseThrow(UserNotFoundException::new);

        userDocument = this.modelMapper.map(user, UserDocument.class);
        this.usersRepository.save(userDocument);
    }

Объект user имеет 1 свойство, установленное в нуль, в то время как объект userDocument имеет его со значением, затем, когда я сохраняю его в базе данных, это значение исчезает (поскольку оно преобразовано в ноль).

Что может быть не так?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Хорошо, так что конфигурация не для той цели, о которой я думал.

Я решил проблему, объединив обновленный объект со старым, следующим образом:

    @Override
    public void editUser(final User user) {
        UserDocument userDocument = this.usersRepository.findByIdAndActivo(user.getId(), true)
                .orElseThrow(UserNotFoundException::new);

        this.modelMapper.map(user, userDocument);
        this.usersRepository.save(userDocument);
    }
0 голосов
/ 29 мая 2019

Mybatis framework?Вы не установили выборочное сохранение --selective

<insert id="insertSelective" parameterType="com.zjl.domain"> insert into table_name <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null"> id, </if> <if test="createDate != null"> create_date, </if> <if test="modifiedDate != null"> modified_date, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> #{id,jdbcType=BIGINT}, </if> <if test="createDate != null"> #{createDate,jdbcType=TIMESTAMP}, </if> <if test="modifiedDate != null"> #{modifiedDate,jdbcType=TIMESTAMP}, </if> </trim> </insert>

...