Rollback не годится, т.к. сбрасывает изменения во всём модуле для всех VO. Поэтому чтобы справиться с задачей модифицируем класс xxxVOImpl добавив в него метод
public void clearAllCache() {
//dont ask
ViewRowSetImpl drsi = super.getDefaultRowSetInternal();
while(drsi.hasNext()) {
Row item = drsi.next();
}
Iterator iter = super.getEntityDef(0).getAllEntityInstancesIterator(this.getDBTransaction());
while(iter.hasNext()) {
EntityImpl entityItem = (EntityImpl) iter.next();
byte status = entityItem.getEntityState();
String s = ((status == EntityImpl.STATUS_MODIFIED) ? " STATUS_MODIFIED" : "")
+ ((status == EntityImpl.STATUS_NEW) ? " STATUS_NEW" : "")
+ ((status == EntityImpl.STATUS_DELETED) ? " STATUS_DELETED" : "")
+ ((status == EntityImpl.STATUS_DEAD) ? " STATUS_DEAD" : "")
+ ((status == EntityImpl.STATUS_INITIALIZED) ? " STATUS_INITIALIZED" : "")
+ ((status == EntityImpl.STATUS_UNMODIFIED) ? " STATUS_UNMODIFIED" : "");
System.err.println(" --- "+ s);
if(status == EntityImpl.STATUS_NEW
|| status == EntityImpl.STATUS_DELETED) {
entityItem.refresh(EntityImpl.REFRESH_REMOVE_NEW_ROWS
| EntityImpl.REFRESH_UNDO_CHANGES);
}
if(status == EntityImpl.STATUS_MODIFIED) {
entityItem.refresh(EntityImpl.REFRESH_WITH_DB_FORGET_CHANGES);
}
}
getViewObject().clearCache();
}
Идея заключается в том, что проходим по всем записям VO и в зависимости от их состояния делаем refresh.
ссыль
public void clearAllCache() {
//dont ask
ViewRowSetImpl drsi = super.getDefaultRowSetInternal();
while(drsi.hasNext()) {
Row item = drsi.next();
}
Iterator iter = super.getEntityDef(0).getAllEntityInstancesIterator(this.getDBTransaction());
while(iter.hasNext()) {
EntityImpl entityItem = (EntityImpl) iter.next();
byte status = entityItem.getEntityState();
String s = ((status == EntityImpl.STATUS_MODIFIED) ? " STATUS_MODIFIED" : "")
+ ((status == EntityImpl.STATUS_NEW) ? " STATUS_NEW" : "")
+ ((status == EntityImpl.STATUS_DELETED) ? " STATUS_DELETED" : "")
+ ((status == EntityImpl.STATUS_DEAD) ? " STATUS_DEAD" : "")
+ ((status == EntityImpl.STATUS_INITIALIZED) ? " STATUS_INITIALIZED" : "")
+ ((status == EntityImpl.STATUS_UNMODIFIED) ? " STATUS_UNMODIFIED" : "");
System.err.println(" --- "+ s);
if(status == EntityImpl.STATUS_NEW
|| status == EntityImpl.STATUS_DELETED) {
entityItem.refresh(EntityImpl.REFRESH_REMOVE_NEW_ROWS
| EntityImpl.REFRESH_UNDO_CHANGES);
}
if(status == EntityImpl.STATUS_MODIFIED) {
entityItem.refresh(EntityImpl.REFRESH_WITH_DB_FORGET_CHANGES);
}
}
getViewObject().clearCache();
}
Идея заключается в том, что проходим по всем записям VO и в зависимости от их состояния делаем refresh.
ссыль
Комментариев нет:
Отправить комментарий