Die Sortierung einer benutzerdefinierten JPA-query mit auslagerungsfähigen
So, ich habe dies bereits getan mit dem standard-Spring-Data-JPA-Schnittstelle, die erweitert PagingAndSortingRepository, um zu erreichen, pagination und Sortierung für eine REST-API. Die Sache ist die, ich will jetzt erreichen das gleiche, aber jetzt mit nur Vanille JPA und so weit so gut ich es geschafft, meine API zu paginieren, aber die Sortierung funktioniert überhaupt nicht. Jedes mal, wenn ich versuche den parameter (von a pageable-Objekt mit pageable.getSort()) es endet mit einem Abfrage-Fehler (entweder, wenn ich senden Sie einfach eine Zeichenfolge als parameter, wie "name" oder senden Sie einfach die sort-Objekt, es zeigt Fehler).
Hier einige code:
Mein repo Umsetzung:
@Override
public List<Project> findByAll(Pageable pageable) {
Query query = em.createQuery("SELECT project FROM Project project ORDER BY :sort");
query.setParameter("sort", pageable.getSort());
query.setMaxResults(pageable.getPageSize());
query.setFirstResult(pageable.getPageSize() * pageable.getPageNumber());
return query.getResultList();
}
Mein service:
@Override
public Page<Project> findAll(Pageable pageable) {
objects = Lists.newArrayList(repository.findByAll(pageable));
PageImpl<Project> pages= new PageImpl<Project>(objects, pageable, repository.count());
return pages;
}
Klar zu sein, ich bin Befüllen die Pageable-Objekt über URI und aus der Konsole kann ich sagen, es ist eigentlich immer die Daten, also gehe ich davon aus, dass das problem mit der repo.
Edit: Das ist die Fehlermeldung die ich bekomme, wenn ich ersetzen Sie die setParameter("Sortieren", ...) für einen hartcodierten Zeichenfolge aka Abfrage.setParameter("sort", "name"):
java.lang.NumberFormatException: For input string: "name"
Und ich denke, diese Methode sollte stehen für Zeichenfolgen als gut. Wenn ich Abfrage.setParameter("sort", auslagerungsfähigen.getSort()), der Fehler ist der gleiche.
- Könnten Sie bitte fügen Sie dem query-Fehler, den Sie haben? Und auch die query-string aufgebaut wäre hilfreich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die order by kann nicht als query-parameter. Auch die Auslagerungsfähigen.getSort().toString() wird wahrscheinlich nicht einen string zurückgeben geeignet für den Einsatz in einer order by-Klausel wird das Ergebnis in einem String für die Bestellung als Eigenschaft: UM, beachten Sie den Doppelpunkt.
Hier sind einige änderungen, das wird funktionieren, solange Java 8...
"CASE WHEN project.name IS NULL THEN 1 ELSE 0 END DESC"
wird ausgeführt, wenn der Benutzer manipuliert die Anfrage.