При создании 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); } }