Je récupère des données par CrudRepository
dans Spring Data JPA . Je souhaite filtrer mes enregistrements qui sont récupérés de ma requête personnalisée fournie dans l'annotation @Query
. J'ai essayé .setMaxResults(20);
pour select rows..
Mais cela donne des erreurs. Je souhaite filtrer les 20 premières lignes de ma table
c'est mon dépôt
package lk.slsi.repository;
import Java.util.Date;
import lk.slsi.domain.SLSNotification;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import Java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
/**
* Created by ignotus on 2/10/2017.
*/
public interface SLSNotificationRepository extends CrudRepository<SLSNotification, Integer> {
@Override
SLSNotification save(SLSNotification slsNotification);
@Override
SLSNotification findOne(Integer snumber);
@Override
long count();
@Override
void delete(Integer integer);
@Override
void delete(SLSNotification slsNotification);
@Override
void delete(Iterable<? extends SLSNotification> iterable);
@Override
List<SLSNotification> findAll();
@Query("select a from SLSNotification a where a.slsiUnit in :unitList order by snumber desc")
List<SLSNotification> getApplicationsByUnit(@Param("unitList") List<String> unitList);
@Query("select a from SLSNotification a where a.userId = :userId")
List<SLSNotification> getApplicationsByUserId(@Param("userId") String userId);
@Query("select a.snumber, a.date, a.slsNo, a.slsiUnit, a.productDesc, a.status from SLSNotification a where a.userId = :userId ORDER BY snumber desc")
List<SLSNotification> getApplicationsByUserIdforManage(@Param("userId") String userId);
@Query("select a from SLSNotification a where a.slsNo = :slsNo")
SLSNotification getApplicationBySLSNumber(@Param("slsNo") String slsNo);
}
Je veux que ma méthode List<SLSNotification> getApplicationsByUserIdforManage(@Param("userId") String userId);
récupère un ensemble limité de données. Comment puis-je appeler le gestionnaire d'entité ou quelque chose ou quoi que ce soit pour le faire?
Vous pouvez fournir des limitations par limit
statement dans votre SQL. Et avoir nativeQuery = true
dans @Query
annotation pour définir le fournisseur JPA (comme Hibernate) pour qu'il considère cela comme une requête SQL native
.
@Query(nativeQuery = true, value = "SELECT * FROM SLSNotification s WHERE s.userId = :userId ORDER BY snumber DESC LIMIT 20")
List<SLSNotification> getUserIdforManage(@Param("userId") String userId);
De plus, si vous souhaitez exploiter les fonctionnalités pratiques de Spring Data JPA , vous pouvez le faire en nommant la méthode appropriée
List<SLSNotification> findByUserIdOrderBySNumber(@Param("userId") String userId, Pageable pageable);
Si vous ne le savez pas déjà, Spring Data JPA construit Query à partir des noms de méthode. Incroyable, non? Lisez ceci documentation pour une meilleure compréhension.
Maintenant, appelez simplement cette méthode comme
Pageable topTwenty = PageRequest.of(0, 20);
List<SLSNotification> notifications = repository.findByUserIdOrderBySNumber("101", topTwenty);
Vous avez la possibilité d'avoir méthode par défaut dans l'interface et de vous faciliter la vie
List<SLSNotification> findByUserIdOrderBySNumber(@Param("userId") String userId, Pageable pageable);
default List<User> findTop20ByUserIdOrderBySNumber(String userId) {
return findByUserIdOrderBySNumber(userId, PageRequest.of(0,20));
}