package com.avaje.ebean; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.Set; /** * Query object for performing native SQL queries that return SqlRow's. *
* Firstly note that you can use your own sql queries with entity beans * by using the SqlSelect annotation. This should be your first approach when * wanting to use your own SQL queries. *
** If ORM Mapping is too tight and constraining for your problem then SqlQuery * could be a good approach. *
** The returned SqlRow objects are similar to a LinkedHashMap with some type * conversion support added. *
* *
* // its typically a good idea to use a named query
* // and put the sql in the orm.xml instead of in your code
*
* String sql = "select id, name from customer where name like :name and status_code = :status";
*
* SqlQuery sqlQuery = Ebean.createSqlQuery(sql);
* sqlQuery.setParameter("name", "Acme%");
* sqlQuery.setParameter("status", "ACTIVE");
*
* // execute the query returning a List of MapBean objects
* List<SqlRow> list = sqlQuery.findList();
*
*
*/
public interface SqlQuery extends Serializable {
/**
* Cancel the query if support by the underlying database and driver.
* * This must be called from a different thread to the one executing the query. *
*/ void cancel(); /** * Execute the query returning a list. */ List* If this query finds 2 or more rows then it will throw a * PersistenceException. *
*/ SqlRow findUnique(); /** * Execute find list SQL query in a background thread. ** This returns a Future object which can be used to cancel, check the * execution status (isDone etc) and get the value (with or without a * timeout). *
* * @return a Future object for the list result of the query * @deprecated */ SqlFutureList findFutureList(); /** * The same as bind for named parameters. */ SqlQuery setParameter(String name, Object value); /** * The same as bind for positioned parameters. */ SqlQuery setParameter(int position, Object value); /** * Set a listener to process the query on a row by row basis. ** It this case the rows are not loaded into the persistence context and * instead can be processed by the query listener. *
** Use this when you want to process a large query and do not want to hold the * entire query result in memory. *
*/ SqlQuery setListener(SqlQueryListener queryListener); /** * Set the index of the first row of the results to return. */ SqlQuery setFirstRow(int firstRow); /** * Set the maximum number of query results to return. */ SqlQuery setMaxRows(int maxRows); /** * Set the index after which fetching continues in a background thread. */ SqlQuery setBackgroundFetchAfter(int backgroundFetchAfter); /** * Set the column to use to determine the keys for a Map. */ SqlQuery setMapKey(String mapKey); /** * Set a timeout on this query. ** This will typically result in a call to setQueryTimeout() on a * preparedStatement. If the timeout occurs an exception will be thrown - this * will be a SQLException wrapped up in a PersistenceException. *
* * @param secs * the query timeout limit in seconds. Zero means there is no limit. */ SqlQuery setTimeout(int secs); /** * A hint which for JDBC translates to the Statement.fetchSize(). ** Gives the JDBC driver a hint as to the number of rows that should be * fetched from the database when more rows are needed for ResultSet. *
*/ SqlQuery setBufferFetchSizeHint(int bufferFetchSizeHint); }