2017-07-07 2 views
0

J'utilise des implémentations de framework de ressort et de niveau de dépôt de travail.En requête JPA, puis-je passer l'ordre par propriété et l'ordre DESC/ASC en tant que paramètres dans la signature de la méthode?

J'ai une classe:

@Repository public interface MyClassReadRepository extends ReadRepository<MyClass, Integer>

Dans cette classe il existe une méthode qui ressemble à ceci:

@Query("SELECT a FROM MyClass a WHERE a.type IN :myType ORDER BY :someProperty :someOrder") Page<MyClass> findByTypeAndOrder(@Param("myType") List<MyType> myType, @Param("someProperty")String someProperty, @Param("someOrder")String someOrder, Pageable pageable)

Mais apparemment, la structure de requête est erronée: « : someProperty "devrait être un identifiant ...

Ma question est: comment passer commande et trier les paramètres dans l'exemple ci-dessus?

Merci d'avance!

+3

1. Google pour les données de printemps jpa. 2. cliquez sur le lien vers la documentation de référence. 3. appuyez sur Cmd-F (ou Ctrl-F) 4. tapez "trier". Et voilà: http://docs.spring.io/spring-data/jpa/docs/1.11.4.RELEASE/reference/html/#jpa.query-methods.sorting –

+0

https://stackoverflow.com/ questions/16890885/spring-data-jpa-multiple-tri –

Répondre

2

Utilisation:

PageRequest(page, size, direction, properties) 

Crée une nouvelle pageSolliciter avec des paramètres de tri appliqués. Paramètres:

page: index de page basé sur zéro. (comme 5 ou 10 etc.)

taille: la taille de la page à renvoyer. (comme 50 ou 100 etc)

direction: la direction du tri à spécifier, peut être nulle. (comme Sort.Direction.ASC)

propriétés: les propriétés à trier par, ne doivent pas être nulles ou vides. (comme "mon nom de colonne")

1

Ma question est: comment passer commande et trier les paramètres dans l'exemple ci-dessus? paramètres

JPA (et JDBC) sont des espaces réservés pour les valeurs , pas pour le texte de la requête plus générale. Vous ne pouvez pas les utiliser à la place des identifiants tels que les noms de colonne ou de table, ni à la place de mots-clés tels que ASC/DESC.

Les requêtes qui ont une forme similaire mais qui diffèrent par un ou plusieurs identifiants ou mots-clés sont des requêtes fondamentalement différentes. Vous avez besoin de Query différents pour les représenter.

1

Vous transmettez déjà un objet Pageable. Vous pouvez passer vos params comme suit

new PageRequest(1, 10, Sort.Direction.ASC, "yourProperty");