Ошибка:
При создании Master- и Detail-записи последовательно через ADF Data Binding, например как в следующем коде:
public String createMasterDetail() {
BindingContainer bindings = getBindings();
OperationBinding operationBinding =
bindings.getOperationBinding("CreateInsertMaster");
Object result = operationBinding.execute();
OperationBinding operationBinding1 =
bindings.getOperationBinding("CreateInsertDetail");
result = operationBinding1.execute();
return null;
}
Причина:
При создании новой строки через ADF Data Binding её статус будет
STATUS_INITIALIZED. А когда Detail-запись пытается найти Master-запись в кеше (у которой статус
STATUS_INITIALIZED), то будет брошено исключение InvalidOwnerException.
Решение:
- Установить флаг Сascade Update Key Attributes в ассоциации между Master- и Detail-сущностями;
- Сгенерировать View Row Class (...ViewRowImpl) для Master-сущности и переопределить в нём следующий метод:
@Override
public void setNewRowState(byte b) {
if (b!=Row.STATUS_INITIALIZED || getNewRowState()!=Row.STATUS_NEW){
super.setNewRowState(b);
}
}
Пример простейшего ADF-приложения
здесь.