2017-11-14 13 views
2

Spring BeanUtils.copyProperties(source、target、excludes)メソッドを使用してエンティティをクローンしていますが、setHandlerというメソッドが呼び出されています。コピー中に除外リストに設定したプロパティ。ハンドラを除外すると、新しいオブジェクトを保存する例外が発生します。Hibernate Spring JPAエンティティを安全にクローンする - Javassist

私は、10個のプロパティを除いてHibernateオブジェクトのクローンを行い、新しいオブジェクトを保存したいだけです。

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は、内部休止状態エラーをスローします。

私がやっていることよりも簡単にオブジェクトをクローンする方法はありますか?

+0

hibernate throwingはどのような例外ですか? –

+0

実際にはエラーが発生していません...エラーはありません...複製されたインスタンスは元のものとまったく同じになります。リフレクションがsetHandlerに取得され、何らかの理由でオブジェクト全体が生成されます。 – chrislhardin

答えて

関連する問題