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は、内部休止状態エラーをスローします。
私がやっていることよりも簡単にオブジェクトをクローンする方法はありますか?
hibernate throwingはどのような例外ですか? –
実際にはエラーが発生していません...エラーはありません...複製されたインスタンスは元のものとまったく同じになります。リフレクションがsetHandlerに取得され、何らかの理由でオブジェクト全体が生成されます。 – chrislhardin