I am using Java StreamSupport to stream on Iterable return from repository method inside of @Transactional method in service layer.
Svc:
@Transactional(readOnly = true)
public Map<String, Map<String, Object>> getAllProjects() {
return StreamSupport.stream(projectRepo.findAllByOrderByNameAsc().spliterator(), true)
.collect(
LinkedHashMap::new,
(map, projectItem) -> map.put(projectItem.getName(), populateProjectItem(projectItem)),
(map, projectMap) -> map.putAll(projectMap)
);
}
private Map<String, Object> populateProjectItem(final Project project) {
return ImmutableMap.of(
"id", project.getId(),
"name", project.getName(),
"taskList", project.getTaskList().stream()
.map(taskItem -> ImmutableMap.of(
"id", taskItem.getId()
)
.collect(Collectors.toList())
);
}
I am not sure what I am doing wrong but it gives me nullpointer on Task Id in test case. project.getTaskList()
is lazy fetch loaded.
Am i missing something ?