Глубокая копия: Orika против SerializationUtils - PullRequest
0 голосов
/ 24 октября 2018

В сущности 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 является картографом орика:

import javax.enterprise.context.ApplicationScoped;

import ma.glasnost.orika.impl.ConfigurableMapper;

@ApplicationScoped
public class DefaultMapper extends ConfigurableMapper {

}

Законно ли использовать орику дляглубокая копия?Или лучше использовать SerializationUtils для достижения этой цели?

Причина TODO заключается в следующем: каждый раз, когда мы вызываем clone() orika использует отражение для вычисления фактического отображения.К сожалению, мы не можем использовать инъекцию, потому что мы находимся внутри сущности.

Мы могли бы также создать конструктор, в котором мы вручную сопоставляем каждое поле.Это не решение здесь, потому что есть много полей с глубокой вложенностью.Кроме того, если добавлен новый столбец, существует высокий риск забыть настроить отображение.

Есть ли у вас лучшее решение, чем использовать orika?Является ли SerializationUtils альтернативой вообще?

1 Ответ

0 голосов
/ 25 октября 2018

Орика намного быстрее.На 10000 карт-итераций Орике понадобилось 3 мс для отображения моего объекта.SerializationUtils потребовалось более 3 секунд , чтобы сделать то же самое.Кроме того, у orika есть кеш для уже сопоставленных объектов.Конечно, это использует больше метапространства.Это зависит от ситуации, но в моем случае лучшее решение - это лучшее решение.

...