Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deep copy: Orika vs SerializationUtils

In an entity MyEntity I found something like this

@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;
}

with DefaultMapper being an orika-mapper:

import javax.enterprise.context.ApplicationScoped;

import ma.glasnost.orika.impl.ConfigurableMapper;

@ApplicationScoped
public class DefaultMapper extends ConfigurableMapper {

}

Is it legit to use orika for a deep copy? Or should one rather use SerializationUtils to achieve this?

The reason for the TODO is: Everytime we call clone() orika uses reflection to calculate the actual mapping. Sadly we cannot use injection because we are inside an entity.

We could as well make a constructor in which we map every single field by hand. This is no solution here because there are many fields with deep nesting. Furthermore, if a new column is added, there is a high risk of forgetting to adjust the mapping.

Do you have any better solution than to use orika? Is SerializationUtils an alternative at all?

like image 429
Chris311 Avatar asked Dec 03 '25 23:12

Chris311


1 Answers

Orika is way faster. On 10000 map-iterations orika needed 3 ms to map my object. SerializationUtils needed over 3 seconds to do the same. Furthermore, orika has a cache for already mapped objects. Of course this uses more metaspace. It depends on the situation but overall orika is a better solution in my case.

like image 182
Chris311 Avatar answered Dec 05 '25 13:12

Chris311



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!