深层复制:Orika 与 SerializationUtils
Deep copy: Orika vs SerializationUtils
在一个实体中 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 是替代品吗?
Orika 的速度要快得多。在 10000 次映射迭代中,orika 需要 3 毫秒来映射我的对象。 SerializationUtils 需要超过 3 秒 才能完成相同的操作。此外,orika 对已经映射的对象有一个缓存。当然这会使用更多的元空间。这取决于具体情况,但总的来说,orika 对我来说是一个更好的解决方案。
在一个实体中 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 是替代品吗?
Orika 的速度要快得多。在 10000 次映射迭代中,orika 需要 3 毫秒来映射我的对象。 SerializationUtils 需要超过 3 秒 才能完成相同的操作。此外,orika 对已经映射的对象有一个缓存。当然这会使用更多的元空间。这取决于具体情况,但总的来说,orika 对我来说是一个更好的解决方案。