2016-09-15 5 views
-1

EmptyInterceptorのonFlushDirty()メソッドでエンティティの以前の状態オブジェクトを取得する方法は?私は現在のセッションと現在のエンティティオブジェクトを持つことができますが、そのエンティティオブジェクトの前の状態を取得することはできません。助けてくださいonFlushDirty()の前の状態オブジェクト

答えて

0

Object[] previousState and String[] propertyNamesパラメータを使用して以前のオブジェクト値にアクセスできます。

@Override 
public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, 
        Object[] previousState, String[] propertyNames, Type[] types) { 

    //Assume SampleBO is your BO class 
    if (entity instanceof SampleBO){ 

    String userName= previousState[ArrayUtils.indexOf(propertyNames, "userName")].toString(); 

    //Do what ever you want with values 

    ((SampleBO)entity).setUserName(userName); 

} 
} 

私は私がちょうどJSONのOBJとしてpreviousStatecurrentState間でオブジェクト差をフェッチそこに私のBOの監査の目的のためにこれを使用しています。これはあなたを助ける

クラスObjectDiffVo

class ObjectDiffVo{ 

    propertyName; 
    oldValue; 
    newValue; 

//getter and setters 
} 

CompareObjDiff機能

private List<ObjectDiffVo> compareObjDiff(Object[] currentState, 
      Object[] previousState, String[] propertyNames) { 

     List<ObjectDiffVo> odVoL = new ArrayList<>(); 

     for (int i = 0; i < propertyNames.length; i++) { 

      if (previousState[i] != currentState[i]) { 

       ObjectDiffVo odVo = new ObjectDiffVo(); 
       odVo.setPropertyName(propertyNames[i]); 
       odVo.setOldValue(previousState[i]); 
       odVo.setNewValue(currentState[i]); 
       odVoL.add(odVo); 
      } 

     } 

     return odVoL; 
    } 

希望。

関連する問題