Pageable dto

0

W jaki sposob moglbym dodac interfejs pageable tak, zeby dzialal on na klasie dto, ktora zawierac bedzie pola z dwoch klas?
Problem jest taki, że wszystko działa dobrze, dopoki chce sortowac pola z klasy którą pobieram dane z repozytorium :

@RepositoryRestResource
public interface TopicRepository extends JpaRepository<Topic, Long> {
    Page<Topic> getTopicsByCategoryId(Long id, Pageable pageable);

Pola z topic sortuja sie i jest wszystko ok, jednak w moim DTO sa takze pola z klasy Post, ktora jest w stosunku jeden do wielu z Topic. niestety gdy chce uzyc jej element do sortowania DTO nie udaje sie to.

metoda z serwisu, potem tylko wywoluje w kontrolerze podajac odpowiednie parametry. zakomentowana czesc to drugi sposob ktory tez niestety nie dziala

   public Page<TopicPaginationDto> getPaginationTopics(Long id, Pageable pageable){
        Page<Topic> topics = topicRepository.getTopicsByCategoryId(id, pageable);

        Page<TopicPaginationDto> topicPaginationDtos =
                topics.map((Function<Topic, TopicPaginationDto>) topic -> new TopicPaginationDto( topic.getId(),
               topic.getTitle(), topic.getTopicAuthor().getUsername(),
               newestPost(topic.getId()).getPostAuthor().getUsername(),
               topic.getDisplayed(), topic.isPinned(), topic.getPosts().size(),
               newestPost(topic.getId()).getPostCreatedDate(),
               topic.getTopicCreatedDate())

        );
//        return new PageImpl<>(topics.stream().map(topic -> new TopicPaginationDto(
//                topic.getId(),
//                topic.getTitle(), topic.getTopicAuthor().getUsername(),
//                newestPost(topic.getId()).getPostAuthor().getUsername(),      -- metoda newestPost(topic.getId) zwraca potrzebujacego posta
//                topic.getDisplayed(), topic.isPinned(), topic.getPosts().size(),
//                newestPost(topic.getId()).getPostCreatedDate(),
//                topic.getTopicCreatedDate()
//        )).collect(Collectors.toList()), pageable, topics.getTotalElements());
        return topicPaginationDtos;
    }

Probowalem takze przez @Query jednak trudne jest do napisania dla mnie otrzymanie wszystkich tematow okreslonej kategorii oraz post kazdego tematu posiadajacy najnowsza date
Prosze o podpowiedz w jaki sposob moge tego dokonac,
pozdrawiam

0

Wrzuć może kod na githuba - tak aby zawierał problem którego dotyczy i wtedy może będę wstanie Ci pomóc.

0

Pokaż jak wyglądają te encje.

0

Lista Post jest pewnie zaciągana osobno przez Hibernate'a, włącz logi Hibernate'a i zobacz czy robi dodatkowe zapytania do bazy po te encje. Wątpię by dało się osiągnąć to co chcesz używając tylko Spring Data, ja przynajmniej nie znam sposobu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1