Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Parameteren ":date_cutoff" (linje 8) udfyldes med property "sores.retention.period" som beskrevet i driftsvejledningen. 

Indlæsning foregår som et join på SOR2SorEntity fra sig selv. En central del af denne join er følgende:

Der skal vælges de rækker, hvor der for hver gruppering på nøglen UniqueCurrentKey, kun vælge dén række, der har den nyeste ValidFrom (date).

For SOR2SorEntity bliver der også læst ind, en liste af sorIds som SOR2SorEntity'ens sorId er blevet erstatte med som bruges til operation ReplacedSORMap.

Code Block
titlegetSorReplacedByEntities
// Finder hele træet af SorId'er, som er blevet erstattet af en given SorId
// Eksempel: Hvis SorId er 101 og vi har denne data struktur:
//   101
//    ├── 102
//    ├── 103
//    │   └── 104
//    └── 105
//        └── 106
// Vil den returner alle disse [102, 103, 104, 105, 106] SorId'er.
public List<Long> getSorReplacedByEntities(Long sorId) {
    Set<Long> visitedSorIds = new HashSet<>();
    List<Long> result = new ArrayList<>();
    recursiveFetch(sorId, visitedSorIds, result);
    return result;
}

private void recursiveFetch(Long sorId, Set<Long> visitedSorIds, List<Long> result) {
    if (visitedSorIds.contains(sorId)) {
        return;
    }
    visitedSorIds.add(sorId);

    String query = "SELECT ReplacedBySorId FROM SOR2SorReplacedByEntities WHERE ReplacedSorId = :sorId";
    HashMap<String, Object> parameters = new HashMap<>();
    parameters.put("sorId", sorId);
    List<Long> replacedByIds = jdbcTemplate.queryForList(query, parameters, Long.class);
    result.addAll(replacedByIds);

    for (Long id : replacedByIds) {
        recursiveFetch(id, visitedSorIds, result);
    }
}


UniqueCurrentKey er en sammensat nøgle, som består af <SorId, FromDate>. Dette er ikke en unik nøgle, da der kan forekomme adskillige rækker af disse. Men ovenstående join vælges kun dén af de rækker, som har nyeste ValidFrom.

...