Как вставить записи в таблицу, которая дважды ссылается на одну и ту же таблицу в ADF программно? - PullRequest
3 голосов
/ 17 марта 2019

У меня есть иерархия, которую я хочу заполнить с помощью 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);

}
...