У меня есть иерархия, которую я хочу заполнить с помощью Oracle ADF, которая выглядит следующим образом:
Таблица стратегий: strgID, strgName
Таблица целей: objvID, objvName, strgID (Внешний ключ)
Таблица Objectives_rel: parentObjvID (внешний ключ), childObjvID (внешний ключ)
Идея состоит в том, что у каждой стратегии есть несколько целей, и каждая цель является уровнем 1цель, поэтому у него нет родителя или уровень> 1, что означает, что у него есть родительская цель.Эти родительские дочерние отношения объявлены в таблице Objectives_rel, где запись в этой таблице символизирует родительские отношения.
Я пытаюсь сделать это , используя объект Json, который показываетэта иерархия Стратегии и целей, чтобы программно заполнить три таблицы (Стратегия, Цель, Цель_реля).
Мне удалось вставить записи, если у Json есть только стратегия и цели уровня 1, но я не могусмоделируйте таблицу отношений правильно.
Обратите внимание, что мне нужно придерживаться текущей иерархии таблиц, поскольку я не являюсь владельцем базы данных.
Редактировать:
Воткод, который я использую для вставки стратегии и целей уровня 1
AppModuleImpl am = null;
try {
am = (AppModuleImpl) Configuration.createRootApplicationModule(AM_DEF_NAME, AM_CONFIG_NAME);
BpmStrgViewImpl strgView = am.getBpmStrgView1();
String jsonString =
"{\"name\":\"strg 1\",\"level\":0,\"objectives\":[{\"name\":\"objv 1\", \"level\": 1, \"children\":[{\"name\":\"objv 3\", \"level\": 2, \"children\":[{\"name\":\"objv 7\", \"level\": 3, \"children\":[{\"name\":\"objv 13\", \"level\": 4, \"children\":null},{\"name\":\"objv 14\", \"level\": 4, \"children\":null}]},{\"name\":\"objv 8\", \"level\": 3, \"children\":[{\"name\":\"objv 15\", \"level\": 4, \"children\":null}]}]},{\"name\":\"objv 4\", \"level\": 2, \"children\":[{\"name\":\"objv 9\", \"level\": 3, \"children\":[{\"name\":\"objv 16\", \"level\": 4, \"children\":null}]},{\"name\":\"objv 10\", \"level\": 3, \"children\":[{\"name\":\"objv 17\", \"level\": 4, \"children\":null}]}]}]},{\"name\":\"objv 2\", \"level\": 1, \"children\":[{\"name\":\"objv 5\", \"level\": 2,\"children\":[{\"name\":\"objv 11\", \"level\": 3, \"children\":[{\"name\":\"objv 18\", \"level\": 4, \"children\":null}]}]},{\"name\":\"objv 6\", \"level\": 2,\"children\":[{\"name\":\"objv 12\", \"level\": 3, \"children\":[{\"name\":\"objv 19\", \"level\": 4, \"children\":null}]}]}]}]}";
JSONObject json = new JSONObject(jsonString);
traverseStrategy(json, strgView);
am.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}
public static void traverseStrategy(JSONObject strategy, BpmStrgViewImpl strgView){
BpmStrgViewRowImpl row = (BpmStrgViewRowImpl)strgView.createRow();
row.setAttribute("ReqId", "12343");
row.setAttribute("StrgCd", "OBJ__CD999");
row.setAttribute("StrgNameAr", strategy.get("name"));
strgView.insertRow(row);
if(strategy.has("objectives")){
JSONArray objectives = (JSONArray) strategy.get("objectives");
// Loop over level 1 objectives
for (int i = 0; i < objectives.length(); i++) {
traverseObjectivesLevelOne((JSONObject) objectives.get(i), row.getBpmObjvView());
}
}
}
public static void traverseObjectivesLevelOne(JSONObject objective, RowIterator objvView){
BpmObjvViewRowImpl row = (BpmObjvViewRowImpl)objvView.createRow();
row.setAttribute("ReqId", "12343");
row.setAttribute("ObjvCd", "OBJ__CD332");
row.setAttribute("ObjvLvl", objective.get("level"));
row.setAttribute("ObjvNameAr", objective.get("name"));
objvView.insertRow(row);
}