-1
EmptyInterceptorのonFlushDirty()メソッドでエンティティの以前の状態オブジェクトを取得する方法は?私は現在のセッションと現在のエンティティオブジェクトを持つことができますが、そのエンティティオブジェクトの前の状態を取得することはできません。助けてくださいonFlushDirty()の前の状態オブジェクト
EmptyInterceptorのonFlushDirty()メソッドでエンティティの以前の状態オブジェクトを取得する方法は?私は現在のセッションと現在のエンティティオブジェクトを持つことができますが、そのエンティティオブジェクトの前の状態を取得することはできません。助けてくださいonFlushDirty()の前の状態オブジェクト
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としてpreviousState
とcurrentState
間でオブジェクト差をフェッチそこに私の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;
}
希望。