Interface PanacheQuery<Entity>

  • Type Parameters:
    Entity - The entity type being queried
    All Known Implementing Classes:
    CustomCountPanacheQuery, PanacheQueryImpl

    public interface PanacheQuery<Entity>

    Interface representing an entity query, which abstracts the use of paging, getting the number of results, and operating on List or Stream.

    Instances of this interface cannot mutate the query itself or its parameters: only paging information can be modified, and instances of this interface can be reused to obtain multiple pages of results.

    Author:
    Stéphane Épardaud
    • Method Detail

      • project

        <T> PanacheQuery<T> project​(Class<T> type)
        Defines a projection class: the getters, and the public fields, will be used to restrict which fields should be retrieved from the database.
        Returns:
        a new query with the same state as the previous one (params, page, range, lockMode, hints, ...).
      • page

        <T extends EntityPanacheQuery<T> page​(int pageIndex,
                                                int pageSize)
        Sets the current page.
        Parameters:
        pageIndex - the page index
        pageSize - the page size
        Returns:
        this query, modified
        See Also:
        page(Page), page()
      • previousPage

        <T extends EntityPanacheQuery<T> previousPage()
        Sets the current page to the previous page (or the first page if there is no previous page)
        Returns:
        this query, modified
        Throws:
        UnsupportedOperationException - if a page hasn't been set or if a range is already set
        See Also:
        nextPage()
      • hasNextPage

        boolean hasNextPage()
        Returns true if there is another page to read after the current one. This will cause reading of the entity count.
        Returns:
        true if there is another page to read
        Throws:
        UnsupportedOperationException - if a page hasn't been set or if a range is already set
        See Also:
        hasPreviousPage(), count()
      • hasPreviousPage

        boolean hasPreviousPage()
        Returns true if there is a page to read before the current one.
        Returns:
        true if there is a previous page to read
        Throws:
        UnsupportedOperationException - if a page hasn't been set or if a range is already set
        See Also:
        hasNextPage()
      • pageCount

        int pageCount()
        Returns the total number of pages to be read using the current page size. This will cause reading of the entity count.
        Returns:
        the total number of pages to be read using the current page size.
        Throws:
        UnsupportedOperationException - if a page hasn't been set or if a range is already set
      • range

        <T extends EntityPanacheQuery<T> range​(int startIndex,
                                                 int lastIndex)
        Switch the query to use a fixed range (start index - last index) instead of a page. As the range is fixed, subsequent pagination of the query is not possible.
        Parameters:
        startIndex - the index of the first element, starting at 0
        lastIndex - the index of the last element
        Returns:
        this query, modified
      • withLock

        <T extends EntityPanacheQuery<T> withLock​(javax.persistence.LockModeType lockModeType)
        Define the locking strategy used for this query.
        Parameters:
        lockModeType - the locking strategy to be used for this query.
        Returns:
        this query, modified
      • withHint

        <T extends EntityPanacheQuery<T> withHint​(String hintName,
                                                    Object value)
        Set a query property or hint on the underlying JPA Query.
        Parameters:
        hintName - name of the property or hint.
        value - value for the property or hint.
        Returns:
        this query, modified
      • filter

        <T extends EntityPanacheQuery<T> filter​(String filterName,
                                                  Parameters parameters)

        Enables a Hibernate filter during fetching of results for this query. Your filter must be declared with FilterDef on your entity or package, and enabled with Filter on your entity.

        WARNING: setting filters can only be done on the underlying Hibernate Session and so this will modify the session's filters for the duration of obtaining the results (not while building the query). Enabled filters will be removed from the session afterwards, but no effort is made to preserve filters enabled on the session outside of this API.

        Parameters:
        filterName - The name of the filter to enable
        parameters - The set of parameters for the filter, if the filter requires parameters
        Returns:
        this query, modified
      • filter

        <T extends EntityPanacheQuery<T> filter​(String filterName,
                                                  Map<String,​Object> parameters)

        Enables a Hibernate filter during fetching of results for this query. Your filter must be declared with FilterDef on your entity or package, and enabled with Filter on your entity.

        WARNING: setting filters can only be done on the underlying Hibernate Session and so this will modify the session's filters for the duration of obtaining the results (not while building the query). Enabled filters will be removed from the session afterwards, but no effort is made to preserve filters enabled on the session outside of this API.

        Parameters:
        filterName - The name of the filter to enable
        parameters - The set of parameters for the filter, if the filter requires parameters
        Returns:
        this query, modified
      • filter

        <T extends EntityPanacheQuery<T> filter​(String filterName)

        Enables a Hibernate filter during fetching of results for this query. Your filter must be declared with FilterDef on your entity or package, and enabled with Filter on your entity.

        WARNING: setting filters can only be done on the underlying Hibernate Session and so this will modify the session's filters for the duration of obtaining the results (not while building the query). Enabled filters will be removed from the session afterwards, but no effort is made to preserve filters enabled on the session outside of this API.

        Parameters:
        filterName - The name of the filter to enable
        Returns:
        this query, modified
      • count

        long count()
        Reads and caches the total number of entities this query operates on. This causes a database query with SELECT COUNT(*) and a query equivalent to the current query, minus ordering.
        Returns:
        the total number of entities this query operates on, cached.
      • firstResult

        <T extends Entity> T firstResult()
        Returns the first result of the current page index. This ignores the current page size to fetch a single result.
        Returns:
        the first result of the current page index, or null if there are no results.
        See Also:
        singleResult()
      • firstResultOptional

        <T extends EntityOptional<T> firstResultOptional()
        Returns the first result of the current page index. This ignores the current page size to fetch a single result.
        Returns:
        if found, an optional containing the entity, else Optional.empty().
        See Also:
        singleResultOptional()
      • singleResult

        <T extends Entity> T singleResult()
        Executes this query for the current page and return a single result.
        Returns:
        the single result (throws if there is not exactly one)
        Throws:
        javax.persistence.NoResultException - if there is no result
        javax.persistence.NonUniqueResultException - if there are more than one result
        See Also:
        firstResult()
      • singleResultOptional

        <T extends EntityOptional<T> singleResultOptional()
        Executes this query for the current page and return a single result.
        Returns:
        if found, an optional containing the entity, else Optional.empty().
        Throws:
        javax.persistence.NonUniqueResultException - if there are more than one result
        See Also:
        firstResultOptional()