首页 > 解决方案 > 使用 Spring JPA 按名称 ASC 排序

问题描述

我需要按名称升序排序,这些值来自 JPA 的 DB。我需要排序Categories, Subcategories(它们是类别对象的子对象)和GlobalTags. 这三个都继承自 Tag 类。

这是我的存储库:

@Repository
@Transactional
public interface TagDao extends JpaRepository<Tag, Long> {

    List<Tag> findTagsByNameAndTagType(String tagName, String tagType);
}
  

这是ServiceImplfindAllTags()

        @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 中访问它时,我得到了未排序的数据。

标签: javaspringhibernatejpa

解决方案


问题是我在使用SetJPA 查询从数据库中检索数据后用来存储数据。Set不存储订购的数据。


推荐阅读