比較2つのエンティティクラスが一貫utilsのとおりです。
インポートあるjava.beans.Introspector; インポートjava.beans.PropertyDescriptor; インポートjava.lang.reflect.Methodオブジェクト、 インポートたjava.sql.Timestamp; インポートjava.util.Date; 輸入java.util.HashMapを、 インポートjava.util.Listに; インポートjava.util.Mapは、 パブリック クラスはClassCompareUtil { / ** *二つのオブジェクトテーブル内のプロパティ値には差がなく、真のブール値を返し、2つのエンティティの属性値を比較 * @paramのオブジェクト属性の比較は、1 oldObject * @param でnewObject属性比較対象2 * @return ブールの結果との間に財産の比較 * / パブリック 静的 ブールcompareObject(オブジェクト内OLDobject、でnewObjectオブジェクト){ 地図 <文字列、マップの<string、オブジェクト>>このresultMap = compareFields(中OLDobject、でnewObject); IF(resultMap.size()> 0 ){ リターン trueに; } そう{ リターン はfalse 。 } } / ** * 2つのエンティティの属性値がこの属性名の地図oldObject、でnewObject値として保存された差分キーと呼ばれるプロパティ、値を返すためにマップの比較 * @param オブジェクト属性比較1でOLDobject * @param オブジェクトの属性比較でnewObject 2 * @returnの結果との間に財産の比較地図 * / @SuppressWarnings( "rawtypes" ) のパブリック 静的地図<文字列、地図<文字列、オブジェクト>> compareFields(Object内のOLDobject、でnewObjectオブジェクト){ 地図 <文字列、地図<文字列、オブジェクトマップ>> = ヌル; 試み{ / ** *唯一の2つのオブジェクトが同じタイプのものと同等である。 * / IF(oldObject.getClass()== newObject.getClass()){ 地図 = 新しい新規のHashMap <文字列、マップの<string、オブジェクト>> (); クラスclazz = oldObject.getClass(); // オブジェクトのすべての属性を取得 PropertyDescriptor [] = PDS Introspector.getBeanInfo(clazz、オブジェクト。クラス).getPropertyDescriptors(); のため(のPropertyDescriptor PD:PDS){ // 取得した属性名の反復 文字列名= pd.getNameを(); // 取得プロパティGETメソッド = readMethod方法、pd.getReadMethodは(); // でoLDobjectを得た等価物性値のgetメソッドoLDobject呼び出す オブジェクトOLDVALUE = (中oLDobject)readMethod.invokeを; //はでnewObject等価物性値にgetメソッドを呼び出し得られるでnewObjectの オブジェクト= newValueにreadMethod.invoke(でnewObject); IF(OLDVALUEinstanceofの一覧){ 続けます。 } 場合(newValueにinstanceofのリスト){ 続けます。 } であれば(OLDVALUE instanceofのタイムスタンプ){ OLDVALUE = 新しい日付(((タイムスタンプ)OLDVALUE).getTime())。 } であれば(newValueにinstanceofのタイムスタンプ){ newValueに = 新しい日付(((タイムスタンプ)newValueに).getTime())。 } であれば(OLDVALUE ==ヌル && newValueに== NULL ){ 続けます。 } それ以外の 場合(OLDVALUE == nullの && newValueに=!ヌル){ 地図 <文字列、オブジェクト>のValueMap = 新しい HashMapの<文字列、オブジェクト> (); valueMap.put( "OldValueプロパティ" 、OLDVALUE)。 valueMap.put( "newValueに" 、newValueに); map.put(名前、ValueMapの); 続け; } // 比较这两个值是否相等、 (!oldValue.equals(newValueに)){ 地図 <文字列、オブジェクト>のValueMap = 新しい HashMapの<文字列、オブジェクト> (); valueMap.put( "OldValueプロパティ" 、OLDVALUE)。 valueMap.put( "newValueに" 、newValueに); map.put(名前、ValueMapの); } } } } キャッチ(例外e){ e.printStackTrace(); } リターンマップ。 } }