Мне нужно отсортировать по имени по возрастанию, значения, поступающие из БД через JPA. Мне нужно отсортировать Categories
, Subcategories
(дочерние элементы объекта категории) и GlobalTags
. Все три наследуются от класса Tag.
Это мой репозиторий:
@Repository
@Transactional
public interface TagDao extends JpaRepository<Tag, Long> {
List<Tag> findTagsByNameAndTagType(String tagName, String tagType);
}
Это ServiceImpl
из findAllTags()
.
@Transactional(readOnly = true)
@Override
public ResponseGetTagsDto findAllTags() {
Set<Tag> tags = new HashSet<>(tagDao.findAll());
Set<Tag> globalTags = tags.stream().filter(tag -> GLOBAL == TagType.valueOf(tag.getTagType().toUpperCase())).collect(Collectors.toSet());
Set<Tag> categoryTags = tags.stream().filter(tag -> CATEGORY == TagType.valueOf(tag.getTagType().toUpperCase())).collect(Collectors.toSet());
Set<SubcategoryTag> subcategoryTags = tags.stream().filter(tag -> SUBCATEGORY == TagType.valueOf(tag.getTagType().toUpperCase())).map(SubcategoryTag.class::cast).collect(Collectors.toSet());
log.info("found tags: {}", tags);
return ResponseGetTagsDto.builder()
.globalTags(globalTags.stream()
.map(globalTag ->
GlobalTagDto.builder()
.id(globalTag.getId())
.name(globalTag.getName())
.tagType(globalTag.getTagType())
.build()).collect(Collectors.toSet()))
.categoryTags(categoryTags.stream()
.map(ct -> CategoryTagDto.builder()
.id(ct.getId())
.name(ct.getName())
.tagType(ct.getTagType())
.subcategoryTags(subcategoryTags.stream()
.filter(subcategoryTag -> subcategoryTag.getCategoryTag().getId().equals(ct.getId()))
.map(subcategoryTag -> SubcategoryTagDto.builder()
.id(subcategoryTag.getId())
.name(subcategoryTag.getName())
.tagType(subcategoryTag.getTagType())
.parentTagId(ct.getId())
.build())
.collect(Collectors.toSet())
)
.build())
.collect(Collectors.toSet())
)
.build();
}
Я пытался сделайте что-нибудь вроде этого: [https://www.baeldung.com/spring-data-sorting], но я получаю несортированные данные при доступе к ним в Postman.