9 votes

Comment trier dynamiquement une propriété de collection dans JPA ?

Nous avons la classe JPA suivante :

@Entity
class Supplier {
  // ... id property etc.

  @OneToMany
  @OrderBy("someProperty")
  private List<Region> regions;
}

Cela fonctionne bien dans le cas normal. Cependant, nous avons des données multilingues où les valeurs sont stockées dans des propriétés telles que nameEn , nameDe , nameZh . La propriété exacte à utiliser dépend de l'utilisateur connecté. Par exemple, un utilisateur germanophone devrait voir les régions comme si elles avaient été annotées avec la propriété @OrderBy("nameDe") .

Comment puis-je y parvenir ?

Je sais que je pourrais trier la collection dans mon code après son chargement, mais cela rend la pagination des résultats assez difficile.

3voto

Felix Leipold Points 269

Vous pourriez les trier en java. Peut-être dans un getter :

List<Region> getRegions(){
  sorted = new List<Regions>(regions);
  Collections.sort(sorted, new RegionComparator(getUserLanguage()));
  return sorted;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X