2016-09-15 5 views
-1

Как получить предыдущий объект состояния объекта в методе onFlushDirty() метода EmptyInterceptor? Я могу иметь текущий сеанс и текущий объект объекта, но получение предыдущего состояния для этого объекта сущности не подходит. Пожалуйста, помогитеПредыдущий объект состояния 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); 

} 
} 

Я использовал это для моих целей BO аудита там я просто принести разницу между объектом previousState и currentState как OBJ Json.

класс 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; 
    } 

Надеется, что это поможет.

Смежные вопросы