Безопасно клонируйте объект JPA Hibernate Spring - Javassist

Я клонирую сущность, используя метод Spring BeanUtils.copyProperties (source, target, exclude), и проблема в том, что существует метод setHandler, который вызывается, и он в основном сбрасывает все свойства, которые я установил в моем списке исключений во время копирования. Если я исключаю обработчик, то получаю исключение, сохраняющее новый объект.

Я просто хочу сделать клон объекта Hibernate, исключая 10 свойств и сохранить новый объект.

    public static <T> T cloneClass(T existing, Class<? extends Annotation> ignores)
        throws Exception {

    final Collection<String> excludes = new ArrayList<>();

    Set<Method> annotated = getMethodsWithAnnotation(ignores, existing.getClass());

    for (Method method : annotated) {

        if (!method.getName().startsWith("get") && !method.getName().startsWith("is"))
            continue;
        String exclude = ReflectUtil.decap(method.getName());
        log.debug("Exclude from copy: " + exclude);
        excludes.add(exclude);
    }

    excludes.add("handler"); <-- must have this
    Object newInstance = existing.getClass().newInstance();
    String[] excludeArray = excludes.toArray(new String[excludes.size()]);

    BeanUtils.copyProperties(existing, newInstance, excludeArray);

    return (T) newInstance;
}

Если я не включу

excludes.add("handler"); <-- must have this

Затем происходит то, что целевой объект получает все свойства из источника и в основном делает мой список исключений бесполезным, но как только я пытаюсь сохранить этот объект, Hibernate выдает внутреннюю ошибку hibernate.

Есть ли более простой способ клонировать объект, чем то, что я делаю?

1 ответ

Я не думаю, что вам действительно нужно заниматься клонированием. Просто извлеките объект, а затем удалите объект из сеанса, и он фактически является клоном: возможно ли отключить объект Hibernate, чтобы изменения в объекте не сохранялись автоматически в базе данных?, Снова запустите другой сеанс, как только вы захотите обновить экземпляр.

Другие вопросы по тегам