2017-03-24 5 views
0

Ich habe eine Anforderung beim Abfragen einer Datenbank mit Paginierung. Während Paginierung, werde ich die Seitengröße und Seitenindex für die Abfrage geben, wie unten gezeigt,Paginierung im Frühjahr-Daten

select distinct tp.* from kat_task_property tp inner join kat_task_to_workstream ttw on ttw.ttw_frn_task_id = tp.tp_frn_task_id and ttw.ttw_frn_workstream_id= :workStreamId and ttw.ttw_ended_by is null and tp.tp_ended_by is null and tp.tp_is_active=true and ttw.ttw_is_active=true left join kat_user_to_task_order kto on ttw.ttw_id = kto.uto_frn_task_to_workstream_id and kto.uto_frn_user_id = :userId order by tp.tp_completed_at ,kto.uto_order limit :index, :size 

Das Probenergebnis wird,

tp_id  tp_completed_at 
1   2017-02-27 06:47:52 
2   null 
3   null 
4   2017-03-14 12:59:24 
5   null 
6   null 
7   null 

Meine Forderung ist, wenn der Index 0 in der Abfrage ist, Ich sollte alle Daten erhalten, bei denen tp_completed_at gleich null ist, unabhängig vom Wert der Größe in der Abfrage. Ich meine, Paginierung sollte nicht angewendet werden, wenn der Index Null ist und ich alle Einträge mit tp_completed_at erhalten soll, ist null. Und wenn der Index einen anderen Wert als 0 hat, sollte die Seitenumbruch gelten. Bitte Hilfe

Antwort

0

können Sie Auslage verwenden, um das zu tun. PageRequest (Seite, Größe)

Pageable page = new PageRequest(0, 10); 

zum Beispiel:

Page<Incident> findByProblemId(Long problemId, Pageable page); 

In Ihrem Fall countQuery = ".... zählen ... ohne Limit (distinct tp *)."

@Query(value = "your existing Query without limit ", countQuery = "countQuery", nativeQuery = true) 
getData(@Param("workStreamId") String workStreamId, @Param("userId") String userId, Pageable page); 
+0

Kann ich Pageable Objekt mit nativen Abfrage – Virat

+0

@Sandesha verwenden Ja, Sie können, aber Sie müssen Zählung Abfrage wie folgt definieren @Query (value = "SELECT * VON BENUTZERN WHERE LASTNAME =? 1", countQuery = "SELECT Anzahl (*) VON BENUTZERN WHERE LASTNAME =? 1", nativeQuery = true) – lucid

+0

Ich habe noch nie Ausgeblendete verwendet. Wie verwende ich meine Suchanfrage? Bitte helfen Sie – Virat

0

Sie können dies erreichen, indem Sie verschiedene Abfragen basierend auf dem Indexwert ausführen.

Edit: diesen Hack versuchen, Works, wenn Ihr Ergebnismenge weniger als Integer.MAX_VALUE

ist
@Query("select distinct tp.* from kat_task_property tp inner join kat_task_to_workstream ttw on ttw.ttw_frn_task_id = tp.tp_frn_task_id and ttw.ttw_frn_workstream_id= :workStreamId and ttw.ttw_ended_by is null and tp.tp_ended_by is null and tp.tp_is_active=true and ttw.ttw_is_active=true left join kat_user_to_task_order kto on ttw.ttw_id = kto.uto_frn_task_to_workstream_id and kto.uto_frn_user_id = :userId and order by tp.tp_completed_at, kto.uto_order") 
Page<T> findTp(Pageable pageable); 

PagingAndSortingRepository<YourObject, Long> repository = // … get access to a bean 
if(index == 0) 
    Page<YourObject> yourObject= repository.findTp(new PageRequest(index, Integer.MAX_VALUE)); 
else 
    Page<YourObject> yourObject= repository.findTp(new PageRequest(index, size)); 
+0

Ich habe eine Null-Bedingung zu tp_completed_at in der ersten Abfrage hinzugefügt, da nur die Zeilen benötigt werden, die zurückgegeben werden. – Anurag

+0

Aber ich bin nicht berechtigt, zwei separate Abfragen zu verwenden. Höchstens kann ich durch tp_completed_at bestellen, um alle Nullwerte nebeneinander zu erhalten – Virat