|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Query | Line # 57 | 0 | 0 | - |
-1.0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| No Tests | |||
| 1 | //$Id: Query.java 10590 2006-10-17 08:57:22Z max.andersen@jboss.com $ | |
| 2 | package org.hibernate; | |
| 3 | ||
| 4 | import java.io.Serializable; | |
| 5 | import java.math.BigDecimal; | |
| 6 | import java.math.BigInteger; | |
| 7 | import java.util.Calendar; | |
| 8 | import java.util.Collection; | |
| 9 | import java.util.Date; | |
| 10 | import java.util.Iterator; | |
| 11 | import java.util.List; | |
| 12 | import java.util.Locale; | |
| 13 | import java.util.Map; | |
| 14 | ||
| 15 | import org.hibernate.transform.ResultTransformer; | |
| 16 | import org.hibernate.type.Type; | |
| 17 | ||
| 18 | /** | |
| 19 | * An object-oriented representation of a Hibernate query. A <tt>Query</tt> | |
| 20 | * instance is obtained by calling <tt>Session.createQuery()</tt>. This | |
| 21 | * interface exposes some extra functionality beyond that provided by | |
| 22 | * <tt>Session.iterate()</tt> and <tt>Session.find()</tt>: | |
| 23 | * <ul> | |
| 24 | * <li>a particular page of the result set may be selected by calling <tt> | |
| 25 | * setMaxResults(), setFirstResult()</tt> | |
| 26 | * <li>named query parameters may be used | |
| 27 | * <li>the results may be returned as an instance of <tt>ScrollableResults</tt> | |
| 28 | * </ul> | |
| 29 | * <br> | |
| 30 | * Named query parameters are tokens of the form <tt>:name</tt> in the | |
| 31 | * query string. A value is bound to the <tt>integer</tt> parameter | |
| 32 | * <tt>:foo</tt> by calling<br> | |
| 33 | * <br> | |
| 34 | * <tt>setParameter("foo", foo, Hibernate.INTEGER);</tt><br> | |
| 35 | * <br> | |
| 36 | * for example. A name may appear multiple times in the query string.<br> | |
| 37 | * <br> | |
| 38 | * JDBC-style <tt>?</tt> parameters are also supported. To bind a | |
| 39 | * value to a JDBC-style parameter use a set method that accepts an | |
| 40 | * <tt>int</tt> positional argument (numbered from zero, contrary | |
| 41 | * to JDBC).<br> | |
| 42 | * <br> | |
| 43 | * You may not mix and match JDBC-style parameters and named parameters | |
| 44 | * in the same query.<br> | |
| 45 | * <br> | |
| 46 | * Queries are executed by calling <tt>list()</tt>, <tt>scroll()</tt> or | |
| 47 | * <tt>iterate()</tt>. A query may be re-executed by subsequent invocations. | |
| 48 | * Its lifespan is, however, bounded by the lifespan of the <tt>Session</tt> | |
| 49 | * that created it.<br> | |
| 50 | * <br> | |
| 51 | * Implementors are not intended to be threadsafe. | |
| 52 | * | |
| 53 | * @see org.hibernate.Session#createQuery(java.lang.String) | |
| 54 | * @see org.hibernate.ScrollableResults | |
| 55 | * @author gperrone | |
| 56 | */ | |
| 57 | public interface Query { | |
| 58 | /** | |
| 59 | * Get the query string. | |
| 60 | * | |
| 61 | * @return the query string | |
| 62 | */ | |
| 63 | public String getQueryString(); | |
| 64 | /** | |
| 65 | * Return the Hibernate types of the query result set. | |
| 66 | * @return an array of types | |
| 67 | */ | |
| 68 | public Type[] getReturnTypes() throws HibernateException; | |
| 69 | /** | |
| 70 | * Return the HQL select clause aliases (if any) | |
| 71 | * @return an array of aliases as strings | |
| 72 | */ | |
| 73 | public String[] getReturnAliases() throws HibernateException; | |
| 74 | /** | |
| 75 | * Return the names of all named parameters of the query. | |
| 76 | * @return the parameter names, in no particular order | |
| 77 | */ | |
| 78 | public String[] getNamedParameters() throws HibernateException; | |
| 79 | /** | |
| 80 | * Return the query results as an <tt>Iterator</tt>. If the query | |
| 81 | * contains multiple results pre row, the results are returned in | |
| 82 | * an instance of <tt>Object[]</tt>.<br> | |
| 83 | * <br> | |
| 84 | * Entities returned as results are initialized on demand. The first | |
| 85 | * SQL query returns identifiers only.<br> | |
| 86 | * | |
| 87 | * @return the result iterator | |
| 88 | * @throws HibernateException | |
| 89 | */ | |
| 90 | public Iterator iterate() throws HibernateException; | |
| 91 | /** | |
| 92 | * Return the query results as <tt>ScrollableResults</tt>. The | |
| 93 | * scrollability of the returned results depends upon JDBC driver | |
| 94 | * support for scrollable <tt>ResultSet</tt>s.<br> | |
| 95 | * | |
| 96 | * @see ScrollableResults | |
| 97 | * @return the result iterator | |
| 98 | * @throws HibernateException | |
| 99 | */ | |
| 100 | public ScrollableResults scroll() throws HibernateException; | |
| 101 | /** | |
| 102 | * Return the query results as <tt>ScrollableResults</tt>. The | |
| 103 | * scrollability of the returned results depends upon JDBC driver | |
| 104 | * support for scrollable <tt>ResultSet</tt>s.<br> | |
| 105 | * | |
| 106 | * @see ScrollableResults | |
| 107 | * @see ScrollMode | |
| 108 | * @return the result iterator | |
| 109 | * @throws HibernateException | |
| 110 | */ | |
| 111 | public ScrollableResults scroll(ScrollMode scrollMode) throws HibernateException; | |
| 112 | /** | |
| 113 | * Return the query results as a <tt>List</tt>. If the query contains | |
| 114 | * multiple results pre row, the results are returned in an instance | |
| 115 | * of <tt>Object[]</tt>. | |
| 116 | * | |
| 117 | * @return the result list | |
| 118 | * @throws HibernateException | |
| 119 | */ | |
| 120 | public List list() throws HibernateException; | |
| 121 | ||
| 122 | /** | |
| 123 | * Return the query results count without extracting it. It works executing | |
| 124 | * a select count(*) on the given query criteria filter | |
| 125 | * | |
| 126 | * @return the query filtered row count | |
| 127 | * @throws HibernateException | |
| 128 | */ | |
| 129 | public int count() throws HibernateException; | |
| 130 | /** | |
| 131 | * Convenience method to return a single instance that matches | |
| 132 | * the query, or null if the query returns no results. | |
| 133 | * | |
| 134 | * @return the single result or <tt>null</tt> | |
| 135 | * @throws NonUniqueResultException if there is more than one matching result | |
| 136 | */ | |
| 137 | public Object uniqueResult() throws HibernateException; | |
| 138 | ||
| 139 | /** | |
| 140 | * Execute the update or delete statement. | |
| 141 | * </p> | |
| 142 | * The semantics are compliant with the ejb3 Query.executeUpdate() | |
| 143 | * method. | |
| 144 | * | |
| 145 | * @return The number of entities updated or deleted. | |
| 146 | * @throws HibernateException | |
| 147 | */ | |
| 148 | public int executeUpdate() throws HibernateException; | |
| 149 | ||
| 150 | /** | |
| 151 | * Set the maximum number of rows to retrieve. If not set, | |
| 152 | * there is no limit to the number of rows retrieved. | |
| 153 | * @param maxResults the maximum number of rows | |
| 154 | */ | |
| 155 | public Query setMaxResults(int maxResults); | |
| 156 | /** | |
| 157 | * Set the first row to retrieve. If not set, rows will be | |
| 158 | * retrieved beginnning from row <tt>0</tt>. | |
| 159 | * @param firstResult a row number, numbered from <tt>0</tt> | |
| 160 | */ | |
| 161 | public Query setFirstResult(int firstResult); | |
| 162 | ||
| 163 | /** | |
| 164 | * Entities retrieved by this query will be loaded in | |
| 165 | * a read-only mode where Hibernate will never dirty-check | |
| 166 | * them or make changes persistent. | |
| 167 | * | |
| 168 | */ | |
| 169 | public Query setReadOnly(boolean readOnly); | |
| 170 | ||
| 171 | /** | |
| 172 | * Enable caching of this query result set. | |
| 173 | * @param cacheable Should the query results be cacheable? | |
| 174 | */ | |
| 175 | public Query setCacheable(boolean cacheable); | |
| 176 | ||
| 177 | /** | |
| 178 | * Set the name of the cache region. | |
| 179 | * @param cacheRegion the name of a query cache region, or <tt>null</tt> | |
| 180 | * for the default query cache | |
| 181 | */ | |
| 182 | public Query setCacheRegion(String cacheRegion); | |
| 183 | ||
| 184 | /** | |
| 185 | * Set a timeout for the underlying JDBC query. | |
| 186 | * @param timeout the timeout in seconds | |
| 187 | */ | |
| 188 | public Query setTimeout(int timeout); | |
| 189 | /** | |
| 190 | * Set a fetch size for the underlying JDBC query. | |
| 191 | * @param fetchSize the fetch size | |
| 192 | */ | |
| 193 | public Query setFetchSize(int fetchSize); | |
| 194 | ||
| 195 | /** | |
| 196 | * Set the lockmode for the objects idententified by the | |
| 197 | * given alias that appears in the <tt>FROM</tt> clause. | |
| 198 | * @param alias a query alias, or <tt>this</tt> for a collection filter | |
| 199 | */ | |
| 200 | public Query setLockMode(String alias, LockMode lockMode); | |
| 201 | ||
| 202 | /** | |
| 203 | * Add a comment to the generated SQL. | |
| 204 | * @param comment a human-readable string | |
| 205 | */ | |
| 206 | public Query setComment(String comment); | |
| 207 | ||
| 208 | /** | |
| 209 | * Override the current session flush mode, just for | |
| 210 | * this query. | |
| 211 | * @see org.hibernate.FlushMode | |
| 212 | */ | |
| 213 | public Query setFlushMode(FlushMode flushMode); | |
| 214 | ||
| 215 | /** | |
| 216 | * Override the current session cache mode, just for | |
| 217 | * this query. | |
| 218 | * @see org.hibernate.CacheMode | |
| 219 | */ | |
| 220 | public Query setCacheMode(CacheMode cacheMode); | |
| 221 | ||
| 222 | /** | |
| 223 | * Bind a value to a JDBC-style query parameter. | |
| 224 | * @param position the position of the parameter in the query | |
| 225 | * string, numbered from <tt>0</tt>. | |
| 226 | * @param val the possibly-null parameter value | |
| 227 | * @param type the Hibernate type | |
| 228 | */ | |
| 229 | public Query setParameter(int position, Object val, Type type); | |
| 230 | /** | |
| 231 | * Bind a value to a named query parameter. | |
| 232 | * @param name the name of the parameter | |
| 233 | * @param val the possibly-null parameter value | |
| 234 | * @param type the Hibernate type | |
| 235 | */ | |
| 236 | public Query setParameter(String name, Object val, Type type); | |
| 237 | ||
| 238 | /** | |
| 239 | * Bind a value to a JDBC-style query parameter. The Hibernate type of the parameter is | |
| 240 | * first detected via the usage/position in the query and if not sufficient secondly | |
| 241 | * guessed from the class of the given object. | |
| 242 | * @param position the position of the parameter in the query | |
| 243 | * string, numbered from <tt>0</tt>. | |
| 244 | * @param val the non-null parameter value | |
| 245 | * @throws org.hibernate.HibernateException if no type could be determined | |
| 246 | */ | |
| 247 | public Query setParameter(int position, Object val) throws HibernateException; | |
| 248 | /** | |
| 249 | * Bind a value to a named query parameter. The Hibernate type of the parameter is | |
| 250 | * first detected via the usage/position in the query and if not sufficient secondly | |
| 251 | * guessed from the class of the given object. | |
| 252 | * @param name the name of the parameter | |
| 253 | * @param val the non-null parameter value | |
| 254 | * @throws org.hibernate.HibernateException if no type could be determined | |
| 255 | */ | |
| 256 | public Query setParameter(String name, Object val) throws HibernateException; | |
| 257 | ||
| 258 | /** | |
| 259 | * Bind values and types to positional parameters. | |
| 260 | */ | |
| 261 | public Query setParameters(Object[] values, Type[] types) throws HibernateException; | |
| 262 | ||
| 263 | /** | |
| 264 | * Bind multiple values to a named query parameter. This is useful for binding | |
| 265 | * a list of values to an expression such as <tt>foo.bar in (:value_list)</tt>. | |
| 266 | * @param name the name of the parameter | |
| 267 | * @param vals a collection of values to list | |
| 268 | * @param type the Hibernate type of the values | |
| 269 | */ | |
| 270 | public Query setParameterList(String name, Collection vals, Type type) throws HibernateException; | |
| 271 | ||
| 272 | /** | |
| 273 | * Bind multiple values to a named query parameter. The Hibernate type of the parameter is | |
| 274 | * first detected via the usage/position in the query and if not sufficient secondly | |
| 275 | * guessed from the class of the first object in the collection. This is useful for binding a list of values | |
| 276 | * to an expression such as <tt>foo.bar in (:value_list)</tt>. | |
| 277 | * @param name the name of the parameter | |
| 278 | * @param vals a collection of values to list | |
| 279 | */ | |
| 280 | public Query setParameterList(String name, Collection vals) throws HibernateException; | |
| 281 | ||
| 282 | /** | |
| 283 | * Bind multiple values to a named query parameter. This is useful for binding | |
| 284 | * a list of values to an expression such as <tt>foo.bar in (:value_list)</tt>. | |
| 285 | * @param name the name of the parameter | |
| 286 | * @param vals a collection of values to list | |
| 287 | * @param type the Hibernate type of the values | |
| 288 | */ | |
| 289 | public Query setParameterList(String name, Object[] vals, Type type) throws HibernateException; | |
| 290 | ||
| 291 | /** | |
| 292 | * Bind multiple values to a named query parameter. The Hibernate type of the parameter is | |
| 293 | * first detected via the usage/position in the query and if not sufficient secondly | |
| 294 | * guessed from the class of the first object in the array. This is useful for binding a list of values | |
| 295 | * to an expression such as <tt>foo.bar in (:value_list)</tt>. | |
| 296 | * @param name the name of the parameter | |
| 297 | * @param vals a collection of values to list | |
| 298 | */ | |
| 299 | public Query setParameterList(String name, Object[] vals) throws HibernateException; | |
| 300 | ||
| 301 | /** | |
| 302 | * Bind the property values of the given bean to named parameters of the query, | |
| 303 | * matching property names with parameter names and mapping property types to | |
| 304 | * Hibernate types using hueristics. | |
| 305 | * @param bean any JavaBean or POJO | |
| 306 | */ | |
| 307 | public Query setProperties(Object bean) throws HibernateException; | |
| 308 | ||
| 309 | /** | |
| 310 | * Bind the values of the given Map for each named parameters of the query, | |
| 311 | * matching key names with parameter names and mapping value types to | |
| 312 | * Hibernate types using hueristics. | |
| 313 | * @param bean a java.util.Map | |
| 314 | */ | |
| 315 | public Query setProperties(Map bean) throws HibernateException; | |
| 316 | ||
| 317 | ||
| 318 | public Query setString(int position, String val); | |
| 319 | public Query setCharacter(int position, char val); | |
| 320 | public Query setBoolean(int position, boolean val); | |
| 321 | public Query setByte(int position, byte val); | |
| 322 | public Query setShort(int position, short val); | |
| 323 | public Query setInteger(int position, int val); | |
| 324 | public Query setLong(int position, long val); | |
| 325 | public Query setFloat(int position, float val); | |
| 326 | public Query setDouble(int position, double val); | |
| 327 | public Query setBinary(int position, byte[] val); | |
| 328 | public Query setText(int position, String val); | |
| 329 | public Query setSerializable(int position, Serializable val); | |
| 330 | public Query setLocale(int position, Locale locale); | |
| 331 | public Query setBigDecimal(int position, BigDecimal number); | |
| 332 | public Query setBigInteger(int position, BigInteger number); | |
| 333 | ||
| 334 | public Query setDate(int position, Date date); | |
| 335 | public Query setTime(int position, Date date); | |
| 336 | public Query setTimestamp(int position, Date date); | |
| 337 | ||
| 338 | public Query setCalendar(int position, Calendar calendar); | |
| 339 | public Query setCalendarDate(int position, Calendar calendar); | |
| 340 | ||
| 341 | public Query setString(String name, String val); | |
| 342 | public Query setCharacter(String name, char val); | |
| 343 | public Query setBoolean(String name, boolean val); | |
| 344 | public Query setByte(String name, byte val); | |
| 345 | public Query setShort(String name, short val); | |
| 346 | public Query setInteger(String name, int val); | |
| 347 | public Query setLong(String name, long val); | |
| 348 | public Query setFloat(String name, float val); | |
| 349 | public Query setDouble(String name, double val); | |
| 350 | public Query setBinary(String name, byte[] val); | |
| 351 | public Query setText(String name, String val); | |
| 352 | public Query setSerializable(String name, Serializable val); | |
| 353 | public Query setLocale(String name, Locale locale); | |
| 354 | public Query setBigDecimal(String name, BigDecimal number); | |
| 355 | public Query setBigInteger(String name, BigInteger number); | |
| 356 | ||
| 357 | public Query setDate(String name, Date date); | |
| 358 | public Query setTime(String name, Date date); | |
| 359 | public Query setTimestamp(String name, Date date); | |
| 360 | ||
| 361 | public Query setCalendar(String name, Calendar calendar); | |
| 362 | public Query setCalendarDate(String name, Calendar calendar); | |
| 363 | ||
| 364 | /** | |
| 365 | * Bind an instance of a mapped persistent class to a JDBC-style query parameter. | |
| 366 | * @param position the position of the parameter in the query | |
| 367 | * string, numbered from <tt>0</tt>. | |
| 368 | * @param val a non-null instance of a persistent class | |
| 369 | */ | |
| 370 | public Query setEntity(int position, Object val); // use setParameter for null values | |
| 371 | ||
| 372 | /** | |
| 373 | * Bind an instance of a mapped persistent class to a named query parameter. | |
| 374 | * @param name the name of the parameter | |
| 375 | * @param val a non-null instance of a persistent class | |
| 376 | */ | |
| 377 | public Query setEntity(String name, Object val); // use setParameter for null values | |
| 378 | ||
| 379 | ||
| 380 | /** | |
| 381 | * Set a strategy for handling the query results. This can be used to change | |
| 382 | * "shape" of the query result. | |
| 383 | * | |
| 384 | * @param transformer The transformer to apply | |
| 385 | * @return this (for method chaining) | |
| 386 | */ | |
| 387 | public Query setResultTransformer(ResultTransformer transformer); | |
| 388 | ||
| 389 | } | |
| 390 | ||
| 391 | ||
| 392 | ||
| 393 | ||
| 394 | ||
| 395 | ||
| 396 | ||
|
||||||||||