java - springframework - Consulta de límite de JPQL
org springframework data jpa repository query limit (4)
En caso de que esté trabajando con spring-data debe utilizar la Interfaz Pageable . Un código de ejemplo a continuación,
Mi servicio,
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@Service
public class MyModelService {
@Autowired
private MyModelRepository myModelRepository;
@Transactional
public Page<MyModel> findMyModelTop5() {
return myModelRepository.findMyModelTop5(new PageRequest(0, 5));
}
}
Mi repositorio,
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@Repository
public interface MyModelRepository extends JpaRepository<MyModel, Integer> {
@Query("SELECT mm FROM MyModel mm")
public Page<MyModel> findMyModelTop5(Pageable pageable);
}
Puede encontrar una respuesta más completa sobre las opciones de datos de primavera disponibles here .
Esta pregunta ya tiene una respuesta aquí:
- Limitar el número de resultados en JPQL 2 respuestas
¿Cómo puedo limitar en una consulta de selección de consulta con nombre JPQL? ¡Necesito que el límite se realice en el nivel de consulta en sí y no en la capa java! Estoy tratando de usar
@NamedQueries(value = {
@NamedQuery(name = UserNotification.QueryName.NOTIFICATION_DISPLAYED,
query = "SELECT un FROM UserNotification un " +
"WHERE un.orgId IN (:orgList) " +
"AND un.user.id = :userId LIMIT 5")
¡¡¡pero en vano!!!
Por favor recomiende
Para las @NamedQueries específicas donde se requiere un límite, puede cambiar a @NamedNativeQuery
@NamedNativeQuery(
name=UserNotification.QueryName.NOTIFICATION_DISPLAYED,
query="SELECT un.* FROM user_notification un " +
"WHERE un.user.id = ?1 LIMIT 5",
resultClass=UserNotification.class
)
No es tan suave, pero hace el trabajo.
mientras ejecuta la consulta con el administrador de entidades, simplemente escriba .setMaxResults (no de obj)
JPQL
no proporciona un mecanismo para limitar las consultas. Esto se logra con más frecuencia utilizando el método setMaxResults()
en la Query
. Si debe evitar especificar esto en el código Java, puede hacer una vista en la base de datos que contiene su consulta y realiza el límite. Luego, asigne una entidad a esta vista como lo haría con una tabla.
Ejemplo:
List<String> resultList= query.setMaxResults(100).getResultList();