Class JRJpaQueryExecuter
java.lang.Object
net.sf.jasperreports.engine.query.JRAbstractQueryExecuter
net.sf.jasperreports.jakarta.ejbql.JRJpaQueryExecuter
- All Implemented Interfaces:
JRQueryExecuter
EJBQL query executer that uses the Java Persistence API.
To use EJBQL in queries, an
jakarta.persistence.EntityManager is needed.
When running or filling reports the em need to be supplied with the named parameter EjbqlConstants.PARAMETER_JPA_ENTITY_MANAGER.
Example:
Map parameters = new HashMap();
EntityManager em = emf.createEntityManager();
parameters.put(EjbqlConstants.PARAMETER_JPA_ENTITY_MANAGER, em);
JasperRunManager.runReportToPdfFile(fileName, parameters);
When dealing with large result sets, pagination can be used by setting the PROPERTY_JPA_QUERY_PAGE_SIZE property in the report template.
Example:
<property name="net.sf.jasperreports.ejbql.query.page.size" value="100"/>
Implementation-specific query hints can be set either using report properties in the report template,
or by supplying the named parameter EjbqlConstants.PARAMETER_JPA_QUERY_HINTS_MAP
containing a java.util.Map with named/value query hints.
Example using report property:
<property name="net.sf.jasperreports.ejbql.query.hint.fetchSize" value="100"/>
The name of the query hint need to be prefixed with net.sf.jasperreports.ejbql.query.hint..
Above example will set a query hint with the name fetchSize and the String value 100.
Example using map:
Map hints = new HashMap();
hints.put("fetchSize", 100);
hints.put("anyName", anyObject());
Map parameters = new HashMap();
EntityManager em = emf.createEntityManager();
parameters.put(EjbqlConstants.PARAMETER_JPA_ENTITY_MANAGER, em);
parameters.put(EjbqlConstants.PARAMETER_JPA_QUERY_HINTS_MAP, hints);
JasperRunManager.runReportToPdfFile(fileName, parameters);
Note that when using report properties only String values can be set as query hint.
When using a query hints map, any Object can be set as value.- Author:
- Marcel Overdijk (marceloverdijk@hotmail.com)
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class net.sf.jasperreports.engine.query.JRAbstractQueryExecuter
JRAbstractQueryExecuter.QueryParameter, JRAbstractQueryExecuter.QueryParameterEntry, JRAbstractQueryExecuter.QueryParameterVisitor, JRAbstractQueryExecuter.ValuedQueryParameter, JRAbstractQueryExecuter.VisitExceptionWrapper -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final StringProperty specifying the prefix for EJBQL query hints.static final StringProperty specifying the number of result rows to be retrieved at once.Fields inherited from class net.sf.jasperreports.engine.query.JRAbstractQueryExecuter
clauseFunctions, dataset, EXCEPTION_MESSAGE_KEY_NUMERIC_TYPE_REQUIRED, EXCEPTION_MESSAGE_KEY_PARAMETER_NOT_FOUND, EXCEPTION_MESSAGE_KEY_QUERY_CLAUSE_CIRCULARLY_NESTED_PARAMETER, EXCEPTION_MESSAGE_KEY_QUERY_CLAUSE_ID_FIRST_TOKEN_MISSING, EXCEPTION_MESSAGE_KEY_QUERY_CLAUSE_NOT_FOUND, EXCEPTION_MESSAGE_KEY_UNSUPPORTED_PARAMETER_TYPE, GET_COLLECTED -
Constructor Summary
ConstructorsConstructorDescriptionJRJpaQueryExecuter(JasperReportsContext jasperReportsContext, JRDataset dataset, Map<String, ? extends JRValueParameter> parameters) -
Method Summary
Modifier and TypeMethodDescriptionbooleanCancels the query if it's currently running.voidclose()Closes resources kept open during the data source iteration.Executes the query and creates aJRDataSourceout of the result.protected voidcreateQuery(String queryString) Creates the EJBQL query object.protected JRDataSourceCreates a data source out of the query result.protected StringReturns a canonical query language for this query executer implementation.protected StringgetEjbqlParameterName(String parameterName) protected StringgetParameterReplacement(String parameterName) Returns the replacement text for a query parameter.List<?> Runs the query by callingjakarta.persistence.Query.getResultList.List<?> getResultList(int firstIndex, int resultCount) Returns a page of the query results by callingjakarta.persistence.Query.getResultList.Methods inherited from class net.sf.jasperreports.engine.query.JRAbstractQueryExecuter
addQueryMultiParameters, addQueryMultiParameters, addQueryParameter, addQueryParameter, appendClauseChunk, appendParameterChunk, appendParameterClauseChunk, appendQueryChunk, appendTextChunk, applyClause, checkParameter, findExtensionQueryFunction, getBooleanParameter, getBooleanParameter, getBooleanParameterOrProperty, getBooleanParameterOrProperty, getCollectedParameterNames, getCollectedParameters, getIntegerParameter, getIntegerParameter, getIntegerParameterOrProperty, getIntegerParameterOrProperty, getJasperReportsContext, getParameterValue, getParameterValue, getPropertiesUtil, getQueryExecutionContext, getQueryString, getRepositoryContext, getStringParameter, getStringParameterOrProperty, getValueParameter, getValueParameter, parameterHasValue, parseQuery, registerClauseFunction, resolveFunction, unregisterClauseFunction, visitQueryParameters
-
Field Details
-
CANONICAL_LANGUAGE
- See Also:
-
PROPERTY_JPA_QUERY_PAGE_SIZE
Property specifying the number of result rows to be retrieved at once. Result pagination is implemented byjakarta.persistence.Query.setFirstResult()andjavax.persistence.Query.setMaxResults(). By default, all the rows are retrieved (no result pagination is performed).- See Also:
-
PROPERTY_JPA_QUERY_HINT_PREFIX
Property specifying the prefix for EJBQL query hints.- See Also:
-
-
Constructor Details
-
JRJpaQueryExecuter
public JRJpaQueryExecuter(JasperReportsContext jasperReportsContext, JRDataset dataset, Map<String, ? extends JRValueParameter> parameters)
-
-
Method Details
-
getCanonicalQueryLanguage
Description copied from class:JRAbstractQueryExecuterReturns a canonical query language for this query executer implementation.The canonical language is used to retrieve extensions for the query executer.
The default implementation returns the runtime query language used in the dataset, but query executer implementations should override this method and return a fixed language.
- Overrides:
getCanonicalQueryLanguagein classJRAbstractQueryExecuter- Returns:
- a canonical query language
-
createDatasource
Description copied from interface:JRQueryExecuterExecutes the query and creates aJRDataSourceout of the result.- Returns:
- a
JRDataSourcewrapping the query execution result. - Throws:
JRException
-
createQuery
Creates the EJBQL query object.- Parameters:
queryString- the query string
-
createResultDatasource
Creates a data source out of the query result.- Returns:
- the data source
-
close
public void close()Description copied from interface:JRQueryExecuterCloses resources kept open during the data source iteration. This method is called after the report is filled or the dataset is iterated. If a resource is not needed after the data source has been created, it should be released at the end ofcreateDatasource. -
cancelQuery
Description copied from interface:JRQueryExecuterCancels the query if it's currently running. This method will be called from a different thread if the client decides to cancel the filling process.- Returns:
trueif and only if the query was running and it has been canceled- Throws:
JRException
-
getParameterReplacement
Description copied from class:JRAbstractQueryExecuterReturns the replacement text for a query parameter.- Specified by:
getParameterReplacementin classJRAbstractQueryExecuter- Parameters:
parameterName- the parameter name- Returns:
- the replacement text
- See Also:
-
getEjbqlParameterName
-
getResultList
Runs the query by callingjakarta.persistence.Query.getResultList. All the result rows are returned.- Returns:
- the result of the query as a list
-
getResultList
Returns a page of the query results by callingjakarta.persistence.Query.getResultList.- Parameters:
firstIndex- the index of the first row to returnresultCount- the number of rows to return- Returns:
- result row list
-