Dozer обнуляет поля, существующие только в dest вместо игнорирования

У меня есть Pojo:

class Pojo{
   String name;
   String surname;
}

и jpa/ спящий объект:

class Entity{
     Long id;
     String code;
     List<EntityPojo> ep;
}

наконец, сущность pojo

class EntityPojo{
    Long id;
    String name;
    String surname;
}

В моем коде я делаю:

//I receive a pojo from the rest call and I want to update
Entity entity = repo.findByCode("aCode");

//at this point my entity pojo IDs are correctly filled!

dozerMapper.map(pojo, entity);

//after the map the IDs are null!!
repo.save(entity); //BAM!

Как вы можете видеть, сопоставление просто удаляет идентификаторы, и это приводит меня к исключению ограничения в спящем режиме... почему это так?

1 ответ

Вы не предоставили код, который изолирует и воспроизводит проблему. Из того, что вы предоставили, хотя бы вещи для проверки:

1) Какой идентификатор в pojo пример? Если он нулевой - вот ваш результат. Может быть полезно: исключить сопоставление пустых значений

2) Проверьте уровни доступа. Я не уверен, как работает Dozer, если поля не являются общедоступными и не имеют методов открытого доступа.

3) Вы проверили, что поля в сущности являются нулевыми, а не в базе данных? Если да - почему у этого вопроса есть тег spring-data-jpa и код, связанный с уровнем устойчивости? Если нет - почему вы уверены, что что-то не так с Dozer, а не с отображением вашей базы данных?

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

Другие вопросы по тегам