Page History
...
| Code Block | ||
|---|---|---|
| ||
// 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) {
// Hvis vi allerede har fundet SorId'et, så returner for at undgå uendelig rekursion
// Data'en er ikke cirkulær, så dette burde ikke ske
if (visitedSorIds.contains(sorId)) {
return;
}
visitedSorIds.add(sorId);
// Find alle SorId'er som er blevet erstattet af den givne 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);
// Tilføj de fundet sorId'er til resultatet
result.addAll(replacedByIds);
// Recursivt kald for hver af de fundne underliggende sorId'er for at finde alle SorId'er i træet
for (Long id : replacedByIds) {
recursiveFetch(id, visitedSorIds, result);
}
} |
...