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, а не с отображением вашей базы данных?
В общем, кажется, вы вообще не работаете над этим вопросом самостоятельно, потому что если вы это сделаете, вы по крайней мере сделаете пример с очищенным слоем постоянства базы данных после проверки, что это не место, где вы теряете свои поля. Действительно сложно ответить на вопрос со смесью технологий, и проблема может быть где угодно.