在实体
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-mapper:
import javax.enterprise.context.ApplicationScoped;
import ma.glasnost.orika.impl.ConfigurableMapper;
@ApplicationScoped
public class DefaultMapper extends ConfigurableMapper {
}
使用orika进行深度复制是否合法?还是应该使用SerializationUtils来实现?
这里TODO
的原因是:每次调用clone()
时,orika都会使用反射来计算实际映射。不幸的是,由于我们在实体内部,无法使用注入。
我们可以手动映射每个单独的字段来创建构造函数。但是,由于存在许多具有深层嵌套的字段,这并不是一个解决方案。此外,如果添加了新列,则很容易忘记调整映射。
除了使用orika之外,您有更好的解决方案吗? SerializationUtils是否也是一种选择?
new DefaultMapper()
是问题是错误的。实际上,每次使用 new 实例化它并不是问题。问题出在映射上,这就是反射发生的地方。我会更新我的帖子。 - Chris311