Cuando hago una solicitud sobre todas las noticias que tengo en mi base de datos, uso una PageRequest como esta:
public Page<StatusUpdate> getPageSiteUser(int pageNumber) { PageRequest request = new PageRequest(pageNumber-1, pageSize, Sort.Direction.DESC, "added"); return statusUpdateDao.findAll(request); }Y muestra todas las noticias de cada página ordenadas en perfecto orden.
Pero ahora, quiero seleccionar las noticias creadas por un usuario, en el mismo formato Pageable (no todas las noticias) y no encuentro cómo hacerlo, así que debo estar cometiendo un error estúpido en alguna parte... debería ser algo como...
public Page<StatusUpdate> findMyStatusUpdates(Long user_id, int pageNumber) { PageRequest request = new PageRequest(pageNumber-1, pageSize, Sort.Direction.DESC, "added"); return statusUpdateDao.findAll(request); }Por favor, responda con un enlace a la teoría si puede. La documentación habla sobre la clasificación, no sobre la selección real ( ingrese la descripción del enlace aquí )
Puede combinar una consulta, para filtrar por el usuario, con una solicitud paginable. Spring puede crear la consulta en función del nombre del método.
Echa un vistazo a la documentación:
Spring data JPA Creación de consultas
Uso de Pageable, Slice y Sort en métodos de consulta
En tu caso, sin ver tu código, supongo que solo necesitas incluir en tu repositorio un método como:
public interface StatusUpdateRepository extends Repository<StatusUpdate, Long> { //finBy<column_name> Page<User> findByUser(Long userId, Pageable pageable); }También puede enviar una PageRequest a un filtro existente en su repositorio. Puede crear un método de repositorio, filtrarlos según las necesidades de su negocio.
Supongamos que le gustaría encontrar publicaciones proporcionando un usuario , atributos de estado y luego ordenarlas por su fecha de creación en orden descendente .
Es posible que no desee que todas las publicaciones se incluyan en el objeto de página mientras las envía a un buscapersonas, antes de agregarlas al modelo de modelo.
Esto es simplemente equivalente a una consulta sql como tal:
select * from Post where user=user and status=status order by createdAt desc--
public interface BlogRepository extends PagingAndSortingRepository<Post, Long> { Page<Post> findByUserAndStatusOrderByCreatedAtDesc(PageRequest pageRequest, User user, boolean status); }y en su controlador, use su implementación (postService) junto con un nuevo objeto PageRequest como:
Page<Post> filteredPosts = postService.findByUserAndStatusOrderByCreatedAtDesc(PageRequest.of(evalPage, evalPageSize), user, status);esto funciona bien para 2.xx; mientras que es mejor usar a continuación para 1.xx
Page<Post> filteredPosts = postService.findByUserAndStatusOrderByCreatedAtDesc(new PageRequest(evalPage, evalPageSize), user, status);Este repositorio me guió hasta cierto punto sobre este asunto con la lógica de paginación, etc.
Solo tuve que cambiar de ModelView a Model en el argumento del controlador y en su lugar devolvió String (nombre de la plantilla).