データ更新を行う場合、ビジネス上で、それらの間のモデルとエンティティの点が、メンバー変数名がほとんど同じなので、1 GSは難しいだろうが、幸い春BeanUtilパッケージと呼ばれるツールがある場合は可能です、それは置換値で同じ名前である限り、コピーされたが、時々私はちょうどそれがパロディので、NULL値が動作していない元の値に新しい値をカバーする必要があります。
パブリック クラスは々 BeanUtils 拡張org.springframework.beans.BeanUtils { プライベート々 BeanUtils(){ } / ** 唯一の非空のフィールドをコピー*エンティティクラスのコピーを、 * * @paramのソース・ソース・クラス * @paramの対象オブジェクトクラス * / パブリック 静的な 無効copyNullProperties (ソースオブジェクト、オブジェクトのターゲット){ Assert.notNull(出典は、 "未送信元はNULLでなければなりません" ); Assert.notNull(ターゲットは、 "ターゲットはNULLでなければなりませんしない" ); クラス <?> actualEditable = target.getClass(); PropertyDescriptor [] targetPdsの =getPropertyDescriptorsが(actualEditable)。 用(のPropertyDescriptor targetPd:targetPds){ 方法writeMethod = targetPd.getWriteMethod()。 してみてください{ 場合(!writeMethod = ヌル){ のPropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass()、targetPd.getName()); もし(!sourcePd = NULL ){ 方法readMethod = sourcePd.getReadMethod()。 もし readMethod(!= nullを && ClassUtils.isAssignable(writeMethod.getParameterTypes()[0 ]、readMethod.getReturnType())){ 場合(!){Modifier.isPublic(readMethod.getDeclaringClass()getModifiers()。) readMethod.setAccessible(真)。 } オブジェクト値 = readMethod.invoke(ソース)。 もし(ヌル ==値)続けます。 もし(!Modifier.isPublic(writeMethod.getDeclaringClass()。getModifiers())){ (writeMethod.setAccessible 真); } writeMethod.invoke(目標値)。 } } } } キャッチ(ThrowableのEX){ スロー 新しい( ' "ソースからターゲットに、" "プロパティをコピーできませんでした" + targetPd.getName()+' FatalBeanExceptionを、元の); } } } }