在实体MyEntity
中,我发现了类似的内容
@Override
public MyEntity clone(){
// TODO: do not use Orika here
MyEntity clone = new DefaultMapper().map(this, MyEntity.class);
clone.setFieldA(null);
clone.setFieldB(null);
return clone;
}
DefaultMapper
是orika映射器:import javax.enterprise.context.ApplicationScoped;
import ma.glasnost.orika.impl.ConfigurableMapper;
@ApplicationScoped
public class DefaultMapper extends ConfigurableMapper {
}
使用orika进行深复制是否合法?还是应该使用SerializationUtils来实现这一目标?
使用
TODO
的原因是:每次我们调用clone()
时,orika都会使用反射来计算实际映射。遗憾的是,由于我们位于实体内部,因此无法使用注入。我们还可以构造一个构造函数,在其中构造一个手工映射每个字段的函数。这里没有解决方案,因为有许多具有深层嵌套的字段。此外,如果添加了新列,则很有可能忘记调整映射。
您是否有比使用orika更好的解决方案?
是SerializationUtils的替代品吗?
最佳答案
Orika更快。在10000次地图迭代中,orika需要3毫秒来映射我的对象。 SerializationUtils需要3 秒来完成相同的操作。此外,orika具有已映射对象的缓存。当然,这会使用更多的元空间。这取决于情况,但就我而言,整体orika是更好的解决方案。