Page History
...
| Code Block | ||
|---|---|---|
| ||
//public FinderList<SorReplacedByDTO> 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 //getSorReplacedByMap() { String query = ├── 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<>()"SELECT ReplacedSorId, ReplacedBySorId, FromDate, ToDate " + "FROM SOR2SorReplacedByEntities"; recursiveFetch(sorId, visitedSorIds, result); List<SorReplacedByDTO> sorReplacedByEntities return result; } private void recursiveFetch(Long sorId, Set<Long> visitedSorIds, List<Long> result) {= jdbcTemplate.query(query, (rs, rowNum) -> // 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 new SorReplacedByDTO( if (visitedSorIdsrs.containsgetLong(sorId)) {"ReplacedSorId"), return; } visitedSorIdsrs.addgetLong(sorId); "ReplacedBySorId"), // Find alle SorId'er som er blevet erstattet af den givne SorId String query = "SELECT ReplacedBySorId FROM SOR2SorReplacedByEntities WHERE ReplacedSorId = :sorId"; rs.getDate("FromDate").toLocalDate(), 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 rs.getDate("ToDate") != null ? rs.getDate("ToDate").toLocalDate() : null ) for (Long id : replacedByIds) {; recursiveFetch(id, visitedSorIds, result)return sorReplacedByEntities; } } |