9
votes

Comment trier le pageréquest sur la chaîne en tant que valeur numérique

J'ai actuellement un système en place qui peut filtrer et trier des enregistrements dans la base de données et les renvoyer comme objet paginé. L'une des lignes est comme ceci:

final PageRequest request = new PageRequest(this.pagingSettings.getPageNumber(),
            this.pagingSettings.getPageSize(), sortDirection, sortedBy);


1 commentaires

Avez-vous eu une solution pour ce problème?


3 Réponses :


2
votes

Donc, fondamentalement, vous devez faire deux choses:

  1. Mettre en œuvre un comparateur personnalisé, LI>
  2. annotez la classe d'entité. LI> OL>

    AD.1. H3>
    @SortComparator(HouseComparator.class)
    List<House> findByHouseNumber(Pageable pageable);
    


4 commentaires

Je ne suis pas sûr que c'est ce que je cherche. Le PageRequest permet d'avoir une réponse pagaie de la liste totale des objets. Cela pourrait signifier que je n'ai que 10 des 200 objets disponibles. Je ne sais pas comment adapter votre solution ici. Pour moi, cela semble être post-tri ici. Je vais voir comment installer cette solution et rapporter ce qu'il fait.


J'utilise page maisons = this.housePositoire.findall (demande); Où dois-je utiliser ce comparateur alors?


Quel DB utilisez-vous?


J'utilise une base de données Postgres.



2
votes

Je pense que vous pouvez essayer la classe de données de printemps code> jpasort code> qui permet aux appels de fonction.

comme indiqué dans le Documentation Vous aurez quelque chose comme: P>

@Query("select u from User u where u.lastname like ?1%")
  List<User> findByAndSort(String lastname, Sort sort);

repo.findByAndSort("targaryen", JpaSort.unsafe("LENGTH(firstname)"));


0 commentaires

1
votes

suppose que vous avez une entité avec une chaîne code> classée et que vous souhaitez trier comme long code> avec JPA pagable.

Vous devez donc faire suite à Choses: (N'oubliez pas que cela fonctionne uniquement avec la base de données Oracle) strong> p>

  1. ajoutez un nouveau produit dans votre entité avec long code> Type Li>
  2. pour la nouvelle utilisation excédée @formula code> dans la méthode getter et évoquer to_number () code> li> ol>
     if (Objects.nonNull(pagingRequest.getSort()) && pagingRequest.getSort().getFieldName().equals("oldField")) {
                pagingRequest.getSort().setFieldName("newField");
     }
    


0 commentaires