Springs BeanUtils.copyProperties() и Apache Commons BeanUtils.copyProperties

Попытка сделать что-то простое здесь. Возьмите объект Entity и скопируйте его свойства с одинаковыми именами в другой компонент.

Вы можете сделать это с помощью Apache Commons

org.apache.commons.beanutils.BeanUtils.copyProperties(source,target)

но проблема здесь в том, что у нас могут быть некоторые свойства, которые являются специфическими для бина сущности (метаданные, такие как метки времени создания, lastUpdated и т. д.), которые мы не хотим копировать в целевой бин, и Apache Commons BeanUtils не поддерживает игнорирование свойств, Меня подтолкнули в сторону Spring BeanUtils

org.springframework.beans.BeanUtils.copyProperties(source,target,ignoreProperties)

Где ignoreProperties - это массив строк с именем свойства, которое вы хотите игнорировать. Похоже, проблема заключается в том, что при выполнении копирования этого свойства он обнуляет свойства исходного объекта! Поскольку исходный объект является объектом Entity с обязательным полем id, когда транзакция фиксируется, мы получаем HibernateException

org.hibernate.HibernateException: identifier of an instance {source} was altered from {originalId} to null

Кто-нибудь знает способ обойти это, или вы намерены использовать один или другой? Меня сбивает с толку, почему библиотека общего ресурса не поддерживает игнорирование свойств при копировании или почему Springframework BeanUtils, кажется, выполняет вырезание / вставку вместо копирования / вставки.

0 ответов

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