在实体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是更好的解决方案。

09-30 09:36