View Javadoc

1   /***
2    * @(#)MrPersisterService.java
3    * 
4    * JFoxSOAF, Service-Oriented Application Framework
5    * 
6    * Copyright(c) JFoxSOAF Team
7    * 
8    * Licensed under the GNU LGPL, Version 2.1 (the "License"); 
9    * you may not use this file except in compliance with the License. 
10   * You may obtain a copy of the License at  
11   * 
12   * http://www.gnu.org/copyleft/lesser.html
13   * 
14   * Unless required by applicable law or agreed to in writing, software
15   * distributed under the License is distributed on an "AS IS" BASIS, 
16   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
17   * See the License for the specific language governing permissions and 
18   * limitations under the License. 
19   * 
20   * For more information, please visit:
21   * http://www.jfox.cn/confluence/display/JFoxSOAF/Home
22   * http://www.huihoo.org/jfox/jfoxsoaf
23   */
24  
25  package org.huihoo.jfox.soaf.services.persistence;
26  
27  import java.sql.Connection;
28  import java.sql.PreparedStatement;
29  import java.sql.ResultSet;
30  import java.sql.Statement;
31  import java.util.Collection;
32  import java.util.List;
33  
34  import javax.sql.DataSource;
35  
36  import org.huihoo.jfox.soaf.exception.DAOException;
37  
38  import com.jenkov.mrpersister.itf.IReadFilter;
39  import com.jenkov.mrpersister.itf.PersistenceException;
40  
41  /***
42   * <p>
43   * MrPersister persistence service wrapper.
44   * </p>
45   * 
46   * @author <a href="mailto:founder_chen@yahoo.com.cn">Peter Cheng </a>
47   * @version $Revision: 1.1 $ $Date: 2006/02/15 08:45:45 $
48   * @version Revision: 1.0
49   */
50  
51  public interface MrPersisterService {
52  
53  	/***
54  	 * Set DataSource
55  	 * 
56  	 * @param dataSource
57  	 */
58  	void setDataSource(DataSource dataSource);
59  
60  	/***
61  	 * Reads a single object from the database using the object mapping stored
62  	 * by the given object mapping key, and the given primary key to identify
63  	 * the record in the database that coresponds to the object to be read. If
64  	 * no record/object was found by the given primary key, null is returned.
65  	 * 
66  	 * <br/><br/>A connection to the database will be obtained from the
67  	 * getConnection() method of this instance.
68  	 * 
69  	 * <br/><br/>If no object mapping is stored by the given object mapping
70  	 * key, a new object mapping will be attempted generated and stored by that
71  	 * object mapping key. An object mapping can only be generated automatically
72  	 * if the method key is either a</code> Class</code> instance, or a <code>
73  	 * com.jenkov.mrpersister.impl.ObjectMappingKey</code> instance with a
74  	 * <code>Class</code> instance set (calling ObjectMappingKey's
75  	 * setObjectClass(Class theClass) method).
76  	 * 
77  	 * <br/><br/>The <code>Class</code> instance should be the class of the
78  	 * object to be read, meaning if you want to read an object of class <code>
79  	 * Employee</code> the <code>Class</code> instance should be that found
80  	 * at <code>Employee.class</code>.
81  	 * 
82  	 * @param objectMappingKey
83  	 *            The object mapping key by which the object mapping to be used
84  	 *            is stored in the object mapping cache, in the persistence
85  	 *            configuration used by this instance of the DAO class.
86  	 * @param primaryKey
87  	 *            The primary key value identifying the record to be read into
88  	 *            an object.
89  	 * @return The object coresponding to the given primary key, read according
90  	 *         to the given object mapping. If no record/object was found by the
91  	 *         given primary key, null is returned.
92  	 * @throws PersistenceException
93  	 *             If anything goes wrong during the read, if no persistence
94  	 *             configuration is set, if the persistence configuration
95  	 *             contains no object reader, or if no object mapping could be
96  	 *             found nor generated from the given object mapping key.
97  	 * @throws DAOException
98  	 */
99  	Object readByPrimaryKey(Object objectMappingKey, Object primaryKey)
100 			throws PersistenceException, DAOException;
101 
102 	/***
103 	 * Reads a single object from the database using the object mapping stored
104 	 * by the given object mapping key, and the given primary key to identify
105 	 * the record in the database that coresponds to the object to be read. If
106 	 * no record/object was found by the given primary key, null is returned.
107 	 * 
108 	 * <br/><br/>A connection to the database will be obtained from the
109 	 * getConnection() method of this instance.
110 	 * 
111 	 * <br/><br/>If no object mapping is stored by the given object mapping
112 	 * key, a new object mapping will be attempted generated and stored by that
113 	 * object mapping key. An object mapping can only be generated automatically
114 	 * if the method key is either a</code> Class</code> instance, or a <code>
115 	 * com.jenkov.mrpersister.impl.ObjectMappingKey</code> instance with a
116 	 * <code>Class</code> instance set (calling ObjectMappingKey's
117 	 * setObjectClass(Class theClass) method).
118 	 * 
119 	 * <br/><br/>The <code>Class</code> instance should be the class of the
120 	 * object to be read, meaning if you want to read an object of class <code>
121 	 * Employee</code> the <code>Class</code> instance should be that found
122 	 * at <code>Employee.class</code>.
123 	 * 
124 	 * @param conn
125 	 *            JDBC Connection.
126 	 * @param objectMappingKey
127 	 *            The object mapping key by which the object mapping to be used
128 	 *            is stored in the object mapping cache, in the persistence
129 	 *            configuration used by this instance of the DAO class.
130 	 * @param primaryKey
131 	 *            The primary key value identifying the record to be read into
132 	 *            an object.
133 	 * @return The object coresponding to the given primary key, read according
134 	 *         to the given object mapping. If no record/object was found by the
135 	 *         given primary key, null is returned.
136 	 * @throws PersistenceException
137 	 *             If anything goes wrong during the read, if no persistence
138 	 *             configuration is set, if the persistence configuration
139 	 *             contains no object reader, or if no object mapping could be
140 	 *             found nor generated from the given object mapping key.
141 	 * @throws DAOException
142 	 */
143 	Object readByPrimaryKey(Connection conn, Object objectMappingKey,
144 			Object primaryKey) throws PersistenceException, DAOException;
145 
146 	/***
147 	 * Reads a single object from the database using the object mapping stored
148 	 * by the given object mapping key, and the given SQL string. If the SQL
149 	 * string results in more than one record in the <code>ResultSet</code>
150 	 * generated by it, only the first record in the <code>ResultSet</code>
151 	 * will be read into an object and returned.
152 	 * 
153 	 * <br/><br/>A connection to the database will be obtained from the
154 	 * getConnection() method of this instance.
155 	 * 
156 	 * <br/><br/>If no object mapping is stored by the given object mapping
157 	 * key, a new object mapping will be attempted generated and stored by that
158 	 * object mapping key. An object mapping can only be generated automatically
159 	 * if the method key is either a</code> Class</code> instance, or a <code>
160 	 * com.jenkov.mrpersister.impl.ObjectMappingKey</code> instance with a
161 	 * <code>Class</code> instance set (calling ObjectMappingKey's
162 	 * setObjectClass(Class theClass) method).
163 	 * 
164 	 * <br/><br/>The <code>Class</code> instance should be the class of the
165 	 * object to be read, meaning if you want to read an object of class <code>
166 	 * Employee</code> the <code>Class</code> instance should be that found
167 	 * at <code>Employee.class</code>.
168 	 * 
169 	 * @param objectMappingKey
170 	 *            The object mapping key by which the object mapping to be used
171 	 *            is stored in the object mapping cache, in the persistence
172 	 *            configuration used by this instance of the DAO class.
173 	 * @param sql
174 	 *            The SQL string locating the record to be read into an object.
175 	 * @return The object read using the given SQL string and object mapping
176 	 *         stored by the given object mapping key.
177 	 * @throws PersistenceException
178 	 *             If anything goes wrong during the read, if no persistence
179 	 *             configuration is set, if the persistence configuration
180 	 *             contains no object reader, or if no object mapping could be
181 	 *             found nor generated from the given object mapping key.
182 	 * @throws DAOException
183 	 */
184 	Object read(Object objectMappingKey, String sql)
185 			throws PersistenceException, DAOException;
186 
187 	/***
188 	 * Reads a single object from the database using the object mapping stored
189 	 * by the given object mapping key, and the given SQL string. If the SQL
190 	 * string results in more than one record in the <code>ResultSet</code>
191 	 * generated by it, only the first record in the <code>ResultSet</code>
192 	 * will be read into an object and returned.
193 	 * 
194 	 * <br/><br/>A connection to the database will be obtained from the
195 	 * getConnection() method of this instance.
196 	 * 
197 	 * <br/><br/>If no object mapping is stored by the given object mapping
198 	 * key, a new object mapping will be attempted generated and stored by that
199 	 * object mapping key. An object mapping can only be generated automatically
200 	 * if the method key is either a</code> Class</code> instance, or a <code>
201 	 * com.jenkov.mrpersister.impl.ObjectMappingKey</code> instance with a
202 	 * <code>Class</code> instance set (calling ObjectMappingKey's
203 	 * setObjectClass(Class theClass) method).
204 	 * 
205 	 * <br/><br/>The <code>Class</code> instance should be the class of the
206 	 * object to be read, meaning if you want to read an object of class <code>
207 	 * Employee</code> the <code>Class</code> instance should be that found
208 	 * at <code>Employee.class</code>.
209 	 * 
210 	 * @param conn
211 	 *            JDBC Connection.
212 	 * @param objectMappingKey
213 	 *            The object mapping key by which the object mapping to be used
214 	 *            is stored in the object mapping cache, in the persistence
215 	 *            configuration used by this instance of the DAO class.
216 	 * @param sql
217 	 *            The SQL string locating the record to be read into an object.
218 	 * @return The object read using the given SQL string and object mapping
219 	 *         stored by the given object mapping key.
220 	 * @throws PersistenceException
221 	 *             If anything goes wrong during the read, if no persistence
222 	 *             configuration is set, if the persistence configuration
223 	 *             contains no object reader, or if no object mapping could be
224 	 *             found nor generated from the given object mapping key.
225 	 * @throws DAOException
226 	 */
227 	Object read(Connection conn, Object objectMappingKey, String sql)
228 			throws PersistenceException, DAOException;
229 
230 	/***
231 	 * Reads a single object from the given <code>ResultSet</code> using the
232 	 * object mapping stored by the given object mapping key. If the
233 	 * <code>ResultSet</code> contains more than one record, only the first
234 	 * record in the <code>ResultSet</code> will be read into an object and
235 	 * returned.
236 	 * 
237 	 * <br/><br/>No database connection will be opened. The object will be read
238 	 * from the provided <code>ResultSet</code>. You must remember to close
239 	 * the <code>ResultSet</code> yourself when you are done with it.
240 	 * 
241 	 * <br/><br/>If no object mapping is stored by the given object mapping
242 	 * key, a new object mapping will be attempted generated and stored by that
243 	 * object mapping key. An object mapping can only be generated automatically
244 	 * if the method key is either a</code> Class</code> instance, or a <code>
245 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
246 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
247 	 * setObjectClass(Class theClass) method).
248 	 * 
249 	 * <br/><br/>The <code>Class</code> instance should be the class of the
250 	 * object to be read, meaning if you want to read an object of class <code>
251 	 * Employee</code> the <code>Class</code> instance should be that found
252 	 * at <code>Employee.class</code>.
253 	 * 
254 	 * @param objectMappingKey
255 	 *            The object mapping key by which the object mapping to be used
256 	 *            is stored in the object mapping cache, in the persistence
257 	 *            configuration used by this instance of the DAO class.
258 	 * @param result
259 	 *            The <code>ResultSet</code> to read the object from.
260 	 * @return The object read from the <code>ResultSet</code> using the
261 	 *         object mapping stored by the given object mapping key.
262 	 * @throws PersistenceException
263 	 *             If anything goes wrong during the read, if no persistence
264 	 *             configuration is set, if the persistence configuration
265 	 *             contains no object reader, or if no object mapping could be
266 	 *             found nor generated from the given object mapping key.
267 	 * @throws DAOException.
268 	 */
269 	Object read(Object objectMappingKey, ResultSet result)
270 			throws PersistenceException, DAOException;
271 
272 	/***
273 	 * Reads a single object from the given <code>ResultSet</code> using the
274 	 * object mapping stored by the given object mapping key. If the
275 	 * <code>ResultSet</code> contains more than one record, only the first
276 	 * record in the <code>ResultSet</code> will be read into an object and
277 	 * returned.
278 	 * 
279 	 * <br/><br/>No database connection will be opened. The object will be read
280 	 * from the provided <code>ResultSet</code>. You must remember to close
281 	 * the <code>ResultSet</code> yourself when you are done with it.
282 	 * 
283 	 * <br/><br/>If no object mapping is stored by the given object mapping
284 	 * key, a new object mapping will be attempted generated and stored by that
285 	 * object mapping key. An object mapping can only be generated automatically
286 	 * if the method key is either a</code> Class</code> instance, or a <code>
287 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
288 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
289 	 * setObjectClass(Class theClass) method).
290 	 * 
291 	 * <br/><br/>The <code>Class</code> instance should be the class of the
292 	 * object to be read, meaning if you want to read an object of class <code>
293 	 * Employee</code> the <code>Class</code> instance should be that found
294 	 * at <code>Employee.class</code>.
295 	 * 
296 	 * @param conn
297 	 *            JDBC Connection.
298 	 * @param objectMappingKey
299 	 *            The object mapping key by which the object mapping to be used
300 	 *            is stored in the object mapping cache, in the persistence
301 	 *            configuration used by this instance of the DAO class.
302 	 * @param result
303 	 *            The <code>ResultSet</code> to read the object from.
304 	 * @return The object read from the <code>ResultSet</code> using the
305 	 *         object mapping stored by the given object mapping key.
306 	 * @throws PersistenceException
307 	 *             If anything goes wrong during the read, if no persistence
308 	 *             configuration is set, if the persistence configuration
309 	 *             contains no object reader, or if no object mapping could be
310 	 *             found nor generated from the given object mapping key.
311 	 * @throws DAOException.
312 	 */
313 	Object read(Connection conn, Object objectMappingKey, ResultSet result)
314 			throws PersistenceException, DAOException;
315 
316 	/***
317 	 * Reads a single object from the database using the given
318 	 * <code>Statement</code> instance, the given SQL string, and the object
319 	 * mapping stored by the given object mapping key. If the
320 	 * <code>ResultSet</code> generated by the <code>Statement</code>
321 	 * instance when executing the SQL string contains more than one record,
322 	 * only the first record in the <code>ResultSet</code> will be read into
323 	 * an object and returned.
324 	 * 
325 	 * <br/><br/>Use this method if you need to use a special/customized
326 	 * <code>Statement</code> instance. If you don't need a special/customized
327 	 * <code>Statement</code> instance, the other <code>read</code> methods
328 	 * will be easier to use.
329 	 * 
330 	 * <br/><br/>No database connection will be opened. The object will be read
331 	 * using the provided <code>Statement</code> instance. You must remember
332 	 * to close the <code>Statement</code> yourself when you are done with it.
333 	 * 
334 	 * 
335 	 * <br/><br/>If no object mapping is stored by the given object mapping
336 	 * key, a new object mapping will be attempted generated and stored by that
337 	 * object mapping key. An object mapping can only be generated automatically
338 	 * if the method key is either a</code> Class</code> instance, or a <code>
339 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
340 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
341 	 * setObjectClass(Class theClass) method).
342 	 * 
343 	 * <br/><br/>The <code>Class</code> instance should be the class of the
344 	 * object to be read, meaning if you want to read an object of class <code>
345 	 * Employee</code> the <code>Class</code> instance should be that found
346 	 * at <code>Employee.class</code>.
347 	 * 
348 	 * @param objectMappingKey
349 	 *            The object mapping key by which the object mapping to be used
350 	 *            is stored in the object mapping cache, in the persistence
351 	 *            configuration used by this instance of the DAO class.
352 	 * @param statement
353 	 *            The <code>Statement</code> instance to use to execute the
354 	 *            SQL string.
355 	 * @param sql
356 	 *            The SQL string to be executed by the <code>Statement</code>
357 	 *            instance.
358 	 * @return
359 	 * @throws PersistenceException
360 	 *             If anything goes wrong during the read, if no persistence
361 	 *             configuration is set, if the persistence configuration
362 	 *             contains no object reader, or if no object mapping could be
363 	 *             found nor generated from the given object mapping key.
364 	 * @throws DAOException.
365 	 */
366 	Object read(Object objectMappingKey, Statement statement, String sql)
367 			throws PersistenceException, DAOException;
368 
369 	/***
370 	 * Reads a single object from the database using the given
371 	 * <code>Statement</code> instance, the given SQL string, and the object
372 	 * mapping stored by the given object mapping key. If the
373 	 * <code>ResultSet</code> generated by the <code>Statement</code>
374 	 * instance when executing the SQL string contains more than one record,
375 	 * only the first record in the <code>ResultSet</code> will be read into
376 	 * an object and returned.
377 	 * 
378 	 * <br/><br/>Use this method if you need to use a special/customized
379 	 * <code>Statement</code> instance. If you don't need a special/customized
380 	 * <code>Statement</code> instance, the other <code>read</code> methods
381 	 * will be easier to use.
382 	 * 
383 	 * <br/><br/>No database connection will be opened. The object will be read
384 	 * using the provided <code>Statement</code> instance. You must remember
385 	 * to close the <code>Statement</code> yourself when you are done with it.
386 	 * 
387 	 * 
388 	 * <br/><br/>If no object mapping is stored by the given object mapping
389 	 * key, a new object mapping will be attempted generated and stored by that
390 	 * object mapping key. An object mapping can only be generated automatically
391 	 * if the method key is either a</code> Class</code> instance, or a <code>
392 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
393 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
394 	 * setObjectClass(Class theClass) method).
395 	 * 
396 	 * <br/><br/>The <code>Class</code> instance should be the class of the
397 	 * object to be read, meaning if you want to read an object of class <code>
398 	 * Employee</code> the <code>Class</code> instance should be that found
399 	 * at <code>Employee.class</code>.
400 	 * 
401 	 * @param conn
402 	 *            JDBC Connection.
403 	 * @param objectMappingKey
404 	 *            The object mapping key by which the object mapping to be used
405 	 *            is stored in the object mapping cache, in the persistence
406 	 *            configuration used by this instance of the DAO class.
407 	 * @param statement
408 	 *            The <code>Statement</code> instance to use to execute the
409 	 *            SQL string.
410 	 * @param sql
411 	 *            The SQL string to be executed by the <code>Statement</code>
412 	 *            instance.
413 	 * @return
414 	 * @throws PersistenceException
415 	 *             If anything goes wrong during the read, if no persistence
416 	 *             configuration is set, if the persistence configuration
417 	 *             contains no object reader, or if no object mapping could be
418 	 *             found nor generated from the given object mapping key.
419 	 * @throws DAOException.
420 	 */
421 	Object read(Connection conn, Object objectMappingKey, Statement statement,
422 			String sql) throws PersistenceException, DAOException;
423 
424 	/***
425 	 * Reads a single object from the database using the given
426 	 * <code>PreparedStatement</code> instance, and the object mapping stored
427 	 * by the given object mapping key. The <code>PreparedStatement</code>
428 	 * instance must have all parameters set before calling this method (using
429 	 * the PreparedStatement.setXXX(index, value) methods). If the
430 	 * <code>ResultSet</code> generated by the <code>PreparedStatement</code>
431 	 * instance contains more than one record, only the first record in the
432 	 * <code>ResultSet</code> will be read into an object and returned.
433 	 * 
434 	 * <br/><br/>No database connection will be opened. The object will be read
435 	 * using the <code>PreparedStatement</code> passed as parameter. You must
436 	 * remember to close the <code>PreparedStatement</code> yourself when you
437 	 * are done with it.
438 	 * 
439 	 * <br/><br/>If no object mapping is stored by the given object mapping
440 	 * key, a new object mapping will be attempted generated and stored by that
441 	 * object mapping key. An object mapping can only be generated automatically
442 	 * if the method key is either a</code> Class</code> instance, or a <code>
443 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
444 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
445 	 * setObjectClass(Class theClass) method).
446 	 * 
447 	 * <br/><br/>The <code>Class</code> instance should be the class of the
448 	 * object to be read, meaning if you want to read an object of class <code>
449 	 * Employee</code> the <code>Class</code> instance should be that found
450 	 * at <code>Employee.class</code>.
451 	 * 
452 	 * @param objectMappingKey
453 	 *            The object mapping key by which the object mapping to be used
454 	 *            is stored in the object mapping cache, in the persistence
455 	 *            configuration used by this instance of the DAO class.
456 	 * @param statement
457 	 *            The <code>PreparedStatement</code> instance locating the
458 	 *            object to read.
459 	 * @return The object read from the <code>ResultSet</code> generated by
460 	 *         the given <code>PreparedStatement</code>, according to the
461 	 *         object mapping located or generated by the given object mapping
462 	 *         key.
463 	 * @throws PersistenceException
464 	 *             If anything goes wrong during the read, if no persistence
465 	 *             configuration is set, if the persistence configuration
466 	 *             contains no object reader, or if no object mapping could be
467 	 *             found nor generated from the given object mapping key.
468 	 * @throws DAOException
469 	 */
470 	Object read(Object objectMappingKey, PreparedStatement statement)
471 			throws PersistenceException, DAOException;
472 
473 	/***
474 	 * Reads a single object from the database using the given
475 	 * <code>PreparedStatement</code> instance, and the object mapping stored
476 	 * by the given object mapping key. The <code>PreparedStatement</code>
477 	 * instance must have all parameters set before calling this method (using
478 	 * the PreparedStatement.setXXX(index, value) methods). If the
479 	 * <code>ResultSet</code> generated by the <code>PreparedStatement</code>
480 	 * instance contains more than one record, only the first record in the
481 	 * <code>ResultSet</code> will be read into an object and returned.
482 	 * 
483 	 * <br/><br/>No database connection will be opened. The object will be read
484 	 * using the <code>PreparedStatement</code> passed as parameter. You must
485 	 * remember to close the <code>PreparedStatement</code> yourself when you
486 	 * are done with it.
487 	 * 
488 	 * <br/><br/>If no object mapping is stored by the given object mapping
489 	 * key, a new object mapping will be attempted generated and stored by that
490 	 * object mapping key. An object mapping can only be generated automatically
491 	 * if the method key is either a</code> Class</code> instance, or a <code>
492 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
493 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
494 	 * setObjectClass(Class theClass) method).
495 	 * 
496 	 * <br/><br/>The <code>Class</code> instance should be the class of the
497 	 * object to be read, meaning if you want to read an object of class <code>
498 	 * Employee</code> the <code>Class</code> instance should be that found
499 	 * at <code>Employee.class</code>.
500 	 * 
501 	 * @param conn
502 	 *            JDBC Connection.
503 	 * @param objectMappingKey
504 	 *            The object mapping key by which the object mapping to be used
505 	 *            is stored in the object mapping cache, in the persistence
506 	 *            configuration used by this instance of the DAO class.
507 	 * @param statement
508 	 *            The <code>PreparedStatement</code> instance locating the
509 	 *            object to read.
510 	 * @return The object read from the <code>ResultSet</code> generated by
511 	 *         the given <code>PreparedStatement</code>, according to the
512 	 *         object mapping located or generated by the given object mapping
513 	 *         key.
514 	 * @throws PersistenceException
515 	 *             If anything goes wrong during the read, if no persistence
516 	 *             configuration is set, if the persistence configuration
517 	 *             contains no object reader, or if no object mapping could be
518 	 *             found nor generated from the given object mapping key.
519 	 */
520 	Object read(Connection conn, Object objectMappingKey,
521 			PreparedStatement statement) throws PersistenceException,
522 			DAOException;
523 
524 	/***
525 	 * Reads a single object from the database using the given SQL string, the
526 	 * parameters, and the object mapping stored by the given object mapping
527 	 * key.
528 	 * 
529 	 * <br/><br/>A <code>PreparedStatement</code> instance will be created
530 	 * using the given SQL string, and the parameters collection will be
531 	 * inserted into it. Therefore the SQL string should have the same format as
532 	 * those used with a <code>PreparedStatement</code>. The parameters will
533 	 * be inserted in the sequence returned by the parameter collection's
534 	 * iterator.
535 	 * 
536 	 * <br/><br/>If the <code>ResultSet</code> generated by the
537 	 * <code>PreparedStatement</code> instance contains more than one record,
538 	 * only the first record in the <code>ResultSet</code> will be read into
539 	 * an object and returned.
540 	 * 
541 	 * <br/><br/>A connection to the database will be obtained from the
542 	 * getConnection() method of this instance.
543 	 * 
544 	 * <br/><br/>If no object mapping is stored by the given object mapping
545 	 * key, a new object mapping will be attempted generated and stored by that
546 	 * object mapping key. An object mapping can only be generated automatically
547 	 * if the method key is either a</code> Class</code> instance, or a <code>
548 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
549 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
550 	 * setObjectClass(Class theClass) method).
551 	 * 
552 	 * <br/><br/>The <code>Class</code> instance should be the class of the
553 	 * object to be read, meaning if you want to read an object of class <code>
554 	 * Employee</code> the <code>Class</code> instance should be that found
555 	 * at <code>Employee.class</code>.
556 	 * 
557 	 * @param objectMappingKey
558 	 *            The object mapping key by which the object mapping to be used
559 	 *            is stored in the object mapping cache, in the persistence
560 	 *            configuration used by this instance of the DAO class.
561 	 * @return The object read from the <code>ResultSet</code> generated by
562 	 *         the given <code>PreparedStatement</code>, according to the
563 	 *         object mapping located or generated by the given object mapping
564 	 *         key.
565 	 * @throws PersistenceException
566 	 *             If anything goes wrong during the read, if no persistence
567 	 *             configuration is set, if the persistence configuration
568 	 *             contains no object reader, or if no object mapping could be
569 	 *             found nor generated from the given object mapping key.
570 	 * @throws DAOException
571 	 */
572 	Object read(Object objectMappingKey, String sql, Collection parameters)
573 			throws PersistenceException, DAOException;
574 
575 	/***
576 	 * Reads a single object from the database using the given SQL string, the
577 	 * parameters, and the object mapping stored by the given object mapping
578 	 * key.
579 	 * 
580 	 * <br/><br/>A <code>PreparedStatement</code> instance will be created
581 	 * using the given SQL string, and the parameters collection will be
582 	 * inserted into it. Therefore the SQL string should have the same format as
583 	 * those used with a <code>PreparedStatement</code>. The parameters will
584 	 * be inserted in the sequence returned by the parameter collection's
585 	 * iterator.
586 	 * 
587 	 * <br/><br/>If the <code>ResultSet</code> generated by the
588 	 * <code>PreparedStatement</code> instance contains more than one record,
589 	 * only the first record in the <code>ResultSet</code> will be read into
590 	 * an object and returned.
591 	 * 
592 	 * <br/><br/>A connection to the database will be obtained from the
593 	 * getConnection() method of this instance.
594 	 * 
595 	 * <br/><br/>If no object mapping is stored by the given object mapping
596 	 * key, a new object mapping will be attempted generated and stored by that
597 	 * object mapping key. An object mapping can only be generated automatically
598 	 * if the method key is either a</code> Class</code> instance, or a <code>
599 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
600 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
601 	 * setObjectClass(Class theClass) method).
602 	 * 
603 	 * <br/><br/>The <code>Class</code> instance should be the class of the
604 	 * object to be read, meaning if you want to read an object of class <code>
605 	 * Employee</code> the <code>Class</code> instance should be that found
606 	 * at <code>Employee.class</code>.
607 	 * 
608 	 * @param objectMappingKey
609 	 *            The object mapping key by which the object mapping to be used
610 	 *            is stored in the object mapping cache, in the persistence
611 	 *            configuration used by this instance of the DAO class.
612 	 * @return The object read from the <code>ResultSet</code> generated by
613 	 *         the given <code>PreparedStatement</code>, according to the
614 	 *         object mapping located or generated by the given object mapping
615 	 *         key.
616 	 * @throws PersistenceException
617 	 *             If anything goes wrong during the read, if no persistence
618 	 *             configuration is set, if the persistence configuration
619 	 *             contains no object reader, or if no object mapping could be
620 	 *             found nor generated from the given object mapping key.
621 	 * @throws DAOException
622 	 */
623 	Object read(Connection conn, Object objectMappingKey, String sql,
624 			Collection parameters) throws PersistenceException, DAOException;
625 
626 	/***
627 	 * Reads a single object from the database using the given SQL string, the
628 	 * parameters, and the object mapping stored by the given object mapping
629 	 * key.
630 	 * 
631 	 * <br/><br/>A <code>PreparedStatement</code> instance will be created
632 	 * using the given SQL string, and the parameters collection will be
633 	 * inserted into it. Therefore the SQL string should have the same format as
634 	 * those used with a <code>PreparedStatement</code>. The parameters will
635 	 * be inserted in the sequence returned by the parameter collection's
636 	 * iterator.
637 	 * 
638 	 * <br/><br/>If the <code>ResultSet</code> generated by the
639 	 * <code>PreparedStatement</code> instance contains more than one record,
640 	 * only the first record in the <code>ResultSet</code> will be read into
641 	 * an object and returned.
642 	 * 
643 	 * <br/><br/>A connection to the database will be obtained from the
644 	 * getConnection() method of this instance.
645 	 * 
646 	 * <br/><br/>If no object mapping is stored by the given object mapping
647 	 * key, a new object mapping will be attempted generated and stored by that
648 	 * object mapping key. An object mapping can only be generated automatically
649 	 * if the method key is either a</code> Class</code> instance, or a <code>
650 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
651 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
652 	 * setObjectClass(Class theClass) method).
653 	 * 
654 	 * <br/><br/>The <code>Class</code> instance should be the class of the
655 	 * object to be read, meaning if you want to read an object of class <code>
656 	 * Employee</code> the <code>Class</code> instance should be that found
657 	 * at <code>Employee.class</code>.
658 	 * 
659 	 * @param objectMappingKey
660 	 *            The object mapping key by which the object mapping to be used
661 	 *            is stored in the object mapping cache, in the persistence
662 	 *            configuration used by this instance of the DAO class.
663 	 * @return The object read from the <code>ResultSet</code> generated by
664 	 *         the given <code>PreparedStatement</code>, according to the
665 	 *         object mapping located or generated by the given object mapping
666 	 *         key.
667 	 * @throws PersistenceException
668 	 *             If anything goes wrong during the read, if no persistence
669 	 *             configuration is set, if the persistence configuration
670 	 *             contains no object reader, or if no object mapping could be
671 	 *             found nor generated from the given object mapping key.
672 	 * @throws DAOException
673 	 */
674 	Object read(Object objectMappingKey, String sql, Object[] parameters)
675 			throws PersistenceException, DAOException;
676 
677 	/***
678 	 * Reads a single object from the database using the given SQL string, the
679 	 * parameters, and the object mapping stored by the given object mapping
680 	 * key.
681 	 * 
682 	 * <br/><br/>A <code>PreparedStatement</code> instance will be created
683 	 * using the given SQL string, and the parameters collection will be
684 	 * inserted into it. Therefore the SQL string should have the same format as
685 	 * those used with a <code>PreparedStatement</code>. The parameters will
686 	 * be inserted in the sequence returned by the parameter collection's
687 	 * iterator.
688 	 * 
689 	 * <br/><br/>If the <code>ResultSet</code> generated by the
690 	 * <code>PreparedStatement</code> instance contains more than one record,
691 	 * only the first record in the <code>ResultSet</code> will be read into
692 	 * an object and returned.
693 	 * 
694 	 * <br/><br/>A connection to the database will be obtained from the
695 	 * getConnection() method of this instance.
696 	 * 
697 	 * <br/><br/>If no object mapping is stored by the given object mapping
698 	 * key, a new object mapping will be attempted generated and stored by that
699 	 * object mapping key. An object mapping can only be generated automatically
700 	 * if the method key is either a</code> Class</code> instance, or a <code>
701 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
702 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
703 	 * setObjectClass(Class theClass) method).
704 	 * 
705 	 * <br/><br/>The <code>Class</code> instance should be the class of the
706 	 * object to be read, meaning if you want to read an object of class <code>
707 	 * Employee</code> the <code>Class</code> instance should be that found
708 	 * at <code>Employee.class</code>.
709 	 * 
710 	 * @param conn
711 	 *            JDBC Connection.
712 	 * @param objectMappingKey
713 	 *            The object mapping key by which the object mapping to be used
714 	 *            is stored in the object mapping cache, in the persistence
715 	 *            configuration used by this instance of the DAO class.
716 	 * @return The object read from the <code>ResultSet</code> generated by
717 	 *         the given <code>PreparedStatement</code>, according to the
718 	 *         object mapping located or generated by the given object mapping
719 	 *         key.
720 	 * @throws PersistenceException
721 	 *             If anything goes wrong during the read, if no persistence
722 	 *             configuration is set, if the persistence configuration
723 	 *             contains no object reader, or if no object mapping could be
724 	 *             found nor generated from the given object mapping key.
725 	 * @throws DAOException
726 	 */
727 	Object read(Connection conn, Object objectMappingKey, String sql,
728 			Object[] parameters) throws PersistenceException, DAOException;
729 
730 	/***
731 	 * Reads a list of objects from the database using the object mapping stored
732 	 * by the given object mapping key, and the given primary keys to identify
733 	 * the records in the database that coresponds to the objects to be read. If
734 	 * no records/objects were found by the given primary keys, an empty list is
735 	 * returned. An empty list is also returned if the collection of primary
736 	 * keys passed to this method is empty.
737 	 * 
738 	 * <br/><br/>A connection to the database will be obtained from the
739 	 * getConnection() method of this instance.
740 	 * 
741 	 * <br/><br/>If no object mapping is stored by the given object mapping
742 	 * key, a new object mapping will be attempted generated and stored by that
743 	 * object mapping key. An object mapping can only be generated automatically
744 	 * if the method key is either a</code> Class</code> instance, or a <code>
745 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
746 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
747 	 * setObjectClass(Class theClass) method).
748 	 * 
749 	 * <br/><br/>The <code>Class</code> instance should be the class of the
750 	 * objects to be read, meaning if you want to read objects of class <code>
751 	 * Employee</code> the <code>Class</code> instance should be that found
752 	 * at <code>Employee.class</code>.
753 	 * 
754 	 * @param objectMappingKey
755 	 *            The object mapping key by which the object mapping to be used
756 	 *            is stored in the object mapping cache, in the persistence
757 	 *            configuration used by this instance of the DAO class.
758 	 * @param primaryKeys
759 	 *            The primary key values identifying the records to be read into
760 	 *            objects.
761 	 * @return The list of objects coresponding to the given primary keys, read
762 	 *         according to the given object mapping. If no records/objects were
763 	 *         found by the given primary keys, an empty list is returned. An
764 	 *         empty list is also returned if the collection of primary keys
765 	 *         passed to this method is empty.
766 	 * @throws PersistenceException
767 	 *             If anything goes wrong during the read, if no persistence
768 	 *             configuration is set, if the persistence configuration
769 	 *             contains no object reader, or if no object mapping could be
770 	 *             found nor generated from the given object mapping key.
771 	 * @throws DAOException
772 	 */
773 	List readListByPrimaryKeys(Object objectMappingKey, Collection primaryKeys)
774 			throws PersistenceException, DAOException;
775 
776 	/***
777 	 * Reads a list of objects from the database using the object mapping stored
778 	 * by the given object mapping key, and the given primary keys to identify
779 	 * the records in the database that coresponds to the objects to be read. If
780 	 * no records/objects were found by the given primary keys, an empty list is
781 	 * returned. An empty list is also returned if the collection of primary
782 	 * keys passed to this method is empty.
783 	 * 
784 	 * <br/><br/>A connection to the database will be obtained from the
785 	 * getConnection() method of this instance.
786 	 * 
787 	 * <br/><br/>If no object mapping is stored by the given object mapping
788 	 * key, a new object mapping will be attempted generated and stored by that
789 	 * object mapping key. An object mapping can only be generated automatically
790 	 * if the method key is either a</code> Class</code> instance, or a <code>
791 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
792 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
793 	 * setObjectClass(Class theClass) method).
794 	 * 
795 	 * <br/><br/>The <code>Class</code> instance should be the class of the
796 	 * objects to be read, meaning if you want to read objects of class <code>
797 	 * Employee</code> the <code>Class</code> instance should be that found
798 	 * at <code>Employee.class</code>.
799 	 * 
800 	 * @param conn
801 	 *            JDBC Connection.
802 	 * @param objectMappingKey
803 	 *            The object mapping key by which the object mapping to be used
804 	 *            is stored in the object mapping cache, in the persistence
805 	 *            configuration used by this instance of the DAO class.
806 	 * @param primaryKeys
807 	 *            The primary key values identifying the records to be read into
808 	 *            objects.
809 	 * @return The list of objects coresponding to the given primary keys, read
810 	 *         according to the given object mapping. If no records/objects were
811 	 *         found by the given primary keys, an empty list is returned. An
812 	 *         empty list is also returned if the collection of primary keys
813 	 *         passed to this method is empty.
814 	 * @throws PersistenceException
815 	 *             If anything goes wrong during the read, if no persistence
816 	 *             configuration is set, if the persistence configuration
817 	 *             contains no object reader, or if no object mapping could be
818 	 *             found nor generated from the given object mapping key.
819 	 * @throws DAOException
820 	 */
821 	List readListByPrimaryKeys(Connection conn, Object objectMappingKey,
822 			Collection primaryKeys) throws PersistenceException, DAOException;
823 
824 	/***
825 	 * Reads a list of objects from the database using the object mapping stored
826 	 * or generated by the given object mapping key, and the given SQL string.
827 	 * The objects will appear in the list in the same order their coresponding
828 	 * records appear in the <code>ResultSet</code> generated by the SQL
829 	 * string.
830 	 * 
831 	 * <br/><br/>A connection to the database will be obtained from the
832 	 * getConnection() method of this instance.
833 	 * 
834 	 * <br/><br/>If no object mapping is stored by the given object mapping
835 	 * key, a new object mapping will be attempted generated and stored by that
836 	 * object mapping key. An object mapping can only be generated automatically
837 	 * if the method key is either a</code> Class</code> instance, or a <code>
838 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
839 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
840 	 * setObjectClass(Class theClass) method).
841 	 * 
842 	 * <br/><br/>The <code>Class</code> instance should be the class of the
843 	 * objects to be read, meaning if you want to read objects of class <code>
844 	 * Employee</code> the <code>Class</code> instance should be that found
845 	 * at <code>Employee.class</code>.
846 	 * 
847 	 * @param objectMappingKey
848 	 *            The object mapping key by which the object mapping to be used
849 	 *            is stored in the object mapping cache, in the persistence
850 	 *            configuration used by this instance of the DAO class.
851 	 * @param sql
852 	 *            The String string locating the records to be read into
853 	 *            objects.
854 	 * @return A <code>List</code> of objects read from the database.
855 	 * @throws PersistenceException
856 	 *             If anything goes wrong during the read, if no persistence
857 	 *             configuration is set, if the persistence configuration
858 	 *             contains no object reader, or if no object mapping could be
859 	 *             found nor generated from the given object mapping key.
860 	 * @throws DAOException
861 	 */
862 	List readList(Object objectMappingKey, String sql)
863 			throws PersistenceException, DAOException;
864 
865 	/***
866 	 * Reads a list of objects from the database using the object mapping stored
867 	 * or generated by the given object mapping key, and the given SQL string.
868 	 * The objects will appear in the list in the same order their coresponding
869 	 * records appear in the <code>ResultSet</code> generated by the SQL
870 	 * string.
871 	 * 
872 	 * <br/><br/>A connection to the database will be obtained from the
873 	 * getConnection() method of this instance.
874 	 * 
875 	 * <br/><br/>If no object mapping is stored by the given object mapping
876 	 * key, a new object mapping will be attempted generated and stored by that
877 	 * object mapping key. An object mapping can only be generated automatically
878 	 * if the method key is either a</code> Class</code> instance, or a <code>
879 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
880 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
881 	 * setObjectClass(Class theClass) method).
882 	 * 
883 	 * <br/><br/>The <code>Class</code> instance should be the class of the
884 	 * objects to be read, meaning if you want to read objects of class <code>
885 	 * Employee</code> the <code>Class</code> instance should be that found
886 	 * at <code>Employee.class</code>.
887 	 * 
888 	 * @param conn
889 	 *            JDBC Connection.
890 	 * @param objectMappingKey
891 	 *            The object mapping key by which the object mapping to be used
892 	 *            is stored in the object mapping cache, in the persistence
893 	 *            configuration used by this instance of the DAO class.
894 	 * @param sql
895 	 *            The String string locating the records to be read into
896 	 *            objects.
897 	 * @return A <code>List</code> of objects read from the database.
898 	 * @throws PersistenceException
899 	 *             If anything goes wrong during the read, if no persistence
900 	 *             configuration is set, if the persistence configuration
901 	 *             contains no object reader, or if no object mapping could be
902 	 *             found nor generated from the given object mapping key.
903 	 * @throws DAOException
904 	 */
905 	List readList(Connection conn, Object objectMappingKey, String sql)
906 			throws PersistenceException, DAOException;
907 
908 	/***
909 	 * Reads a list of objects from the given <code>ResultSet</code> using the
910 	 * object mapping stored or generated by the given object mapping key. The
911 	 * objects will appear in the list in the same order their coresponding
912 	 * records appear in the <code>ResultSet</code>.
913 	 * 
914 	 * <br/><br/>No database connection will be opened. The object will be read
915 	 * from the provided <code>ResultSet</code>. You must remember to close
916 	 * the <code>ResultSet</code> yourself when you are done with it.
917 	 * 
918 	 * <br/><br/>If no object mapping is stored by the given object mapping
919 	 * key, a new object mapping will be attempted generated and stored by that
920 	 * object mapping key. An object mapping can only be generated automatically
921 	 * if the method key is either a</code> Class</code> instance, or a <code>
922 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
923 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
924 	 * setObjectClass(Class theClass) method).
925 	 * 
926 	 * <br/><br/>The <code>Class</code> instance should be the class of the
927 	 * objects to be read, meaning if you want to read objects of class <code>
928 	 * Employee</code> the <code>Class</code> instance should be that found
929 	 * at <code>Employee.class</code>.
930 	 * 
931 	 * @param objectMappingKey
932 	 *            The object mapping key by which the object mapping to be used
933 	 *            is stored in the object mapping cache, in the persistence
934 	 *            configuration used by this instance of the DAO class.
935 	 * @param result
936 	 *            The <code>ResultSet</code> to read the list of objects from.
937 	 * @return A <code>List</code> of objects read from the database.
938 	 * @throws PersistenceException
939 	 *             If anything goes wrong during the read, if no persistence
940 	 *             configuration is set, if the persistence configuration
941 	 *             contains no object reader, or if no object mapping could be
942 	 *             found nor generated from the given object mapping key.
943 	 * @throws DAOException
944 	 */
945 	List readList(Object objectMappingKey, ResultSet result)
946 			throws PersistenceException, DAOException;
947 
948 	/***
949 	 * Reads a list of objects from the given <code>ResultSet</code> using the
950 	 * object mapping stored or generated by the given object mapping key. The
951 	 * objects will appear in the list in the same order their coresponding
952 	 * records appear in the <code>ResultSet</code>.
953 	 * 
954 	 * <br/><br/>No database connection will be opened. The object will be read
955 	 * from the provided <code>ResultSet</code>. You must remember to close
956 	 * the <code>ResultSet</code> yourself when you are done with it.
957 	 * 
958 	 * <br/><br/>If no object mapping is stored by the given object mapping
959 	 * key, a new object mapping will be attempted generated and stored by that
960 	 * object mapping key. An object mapping can only be generated automatically
961 	 * if the method key is either a</code> Class</code> instance, or a <code>
962 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
963 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
964 	 * setObjectClass(Class theClass) method).
965 	 * 
966 	 * <br/><br/>The <code>Class</code> instance should be the class of the
967 	 * objects to be read, meaning if you want to read objects of class <code>
968 	 * Employee</code> the <code>Class</code> instance should be that found
969 	 * at <code>Employee.class</code>.
970 	 * 
971 	 * @param conn
972 	 *            JDBC Connection.
973 	 * @param objectMappingKey
974 	 *            The object mapping key by which the object mapping to be used
975 	 *            is stored in the object mapping cache, in the persistence
976 	 *            configuration used by this instance of the DAO class.
977 	 * @param result
978 	 *            The <code>ResultSet</code> to read the list of objects from.
979 	 * @return A <code>List</code> of objects read from the database.
980 	 * @throws PersistenceException
981 	 *             If anything goes wrong during the read, if no persistence
982 	 *             configuration is set, if the persistence configuration
983 	 *             contains no object reader, or if no object mapping could be
984 	 *             found nor generated from the given object mapping key.
985 	 * @throws DAOException
986 	 */
987 	List readList(Connection conn, Object objectMappingKey, ResultSet result)
988 			throws PersistenceException, DAOException;
989 
990 	/***
991 	 * Reads a list of objects from the database using the given
992 	 * <code>Statement</code> instance, the given SQL string and the object
993 	 * mapping stored or generated by the given object mapping key. The objects
994 	 * will appear in the list in the same order their coresponding records
995 	 * appear in the <code>ResultSet</code> generated by the
996 	 * <code>Statement</code>'s execution of the SQL string.
997 	 * 
998 	 * <br/><br/>Use this method if you need to use a special/customized
999 	 * <code>Statement</code> instance. If you don't need a special/customized
1000 	 * <code>Statement</code> instance, the other <code>read</code> methods
1001 	 * will be easier to use.
1002 	 * 
1003 	 * No database connections will be opened. The objects will be read from the
1004 	 * provided <code>Statement</code>. You must remember to close the
1005 	 * <code>Statement</code> after your are dont with it.
1006 	 * 
1007 	 * 
1008 	 * <br/><br/>If no object mapping is stored by the given object mapping
1009 	 * key, a new object mapping will be attempted generated and stored by that
1010 	 * object mapping key. An object mapping can only be generated automatically
1011 	 * if the method key is either a</code> Class</code> instance, or a <code>
1012 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1013 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1014 	 * setObjectClass(Class theClass) method). The <code>Class</code> instance
1015 	 * should be the class of the object to be stored, meaning if you want to
1016 	 * store an object of class <code>Employee</code> the <code>Class</code>
1017 	 * instance should be that found at <code>Employee.class</code>.
1018 	 * 
1019 	 * @param objectMappingKey
1020 	 *            The object mapping key by which the object mapping to be used
1021 	 *            is stored in the object mapping cache, in the persistence
1022 	 *            configuration used by this instance of the DAO class.
1023 	 * @param statement
1024 	 *            The <code>Statement</code> instance to be used to execute
1025 	 *            the SQL string.
1026 	 * @param sql
1027 	 *            The SQL string to be executed by the <code>Statement</code>
1028 	 *            instance.
1029 	 * @return A <code>List</code> of objects read from the database.
1030 	 * @throws PersistenceException
1031 	 *             If anything goes wrong during the read, if no persistence
1032 	 *             configuration is set, if the persistence configuration
1033 	 *             contains no object reader, or if no object mapping could be
1034 	 *             found nor generated from the given object mapping key.
1035 	 * @throws DAOException
1036 	 */
1037 	List readList(Object objectMappingKey, Statement statement, String sql)
1038 			throws PersistenceException, DAOException;
1039 
1040 	/***
1041 	 * Reads a list of objects from the database using the given
1042 	 * <code>Statement</code> instance, the given SQL string and the object
1043 	 * mapping stored or generated by the given object mapping key. The objects
1044 	 * will appear in the list in the same order their coresponding records
1045 	 * appear in the <code>ResultSet</code> generated by the
1046 	 * <code>Statement</code>'s execution of the SQL string.
1047 	 * 
1048 	 * <br/><br/>Use this method if you need to use a special/customized
1049 	 * <code>Statement</code> instance. If you don't need a special/customized
1050 	 * <code>Statement</code> instance, the other <code>read</code> methods
1051 	 * will be easier to use.
1052 	 * 
1053 	 * No database connections will be opened. The objects will be read from the
1054 	 * provided <code>Statement</code>. You must remember to close the
1055 	 * <code>Statement</code> after your are dont with it.
1056 	 * 
1057 	 * 
1058 	 * <br/><br/>If no object mapping is stored by the given object mapping
1059 	 * key, a new object mapping will be attempted generated and stored by that
1060 	 * object mapping key. An object mapping can only be generated automatically
1061 	 * if the method key is either a</code> Class</code> instance, or a <code>
1062 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1063 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1064 	 * setObjectClass(Class theClass) method). The <code>Class</code> instance
1065 	 * should be the class of the object to be stored, meaning if you want to
1066 	 * store an object of class <code>Employee</code> the <code>Class</code>
1067 	 * instance should be that found at <code>Employee.class</code>.
1068 	 * 
1069 	 * @param conn
1070 	 *            JDBC Connection.
1071 	 * @param objectMappingKey
1072 	 *            The object mapping key by which the object mapping to be used
1073 	 *            is stored in the object mapping cache, in the persistence
1074 	 *            configuration used by this instance of the DAO class.
1075 	 * @param statement
1076 	 *            The <code>Statement</code> instance to be used to execute
1077 	 *            the SQL string.
1078 	 * @param sql
1079 	 *            The SQL string to be executed by the <code>Statement</code>
1080 	 *            instance.
1081 	 * @return A <code>List</code> of objects read from the database.
1082 	 * @throws PersistenceException
1083 	 *             If anything goes wrong during the read, if no persistence
1084 	 *             configuration is set, if the persistence configuration
1085 	 *             contains no object reader, or if no object mapping could be
1086 	 *             found nor generated from the given object mapping key.
1087 	 * @throws DAOException
1088 	 */
1089 	List readList(Connection conn, Object objectMappingKey,
1090 			Statement statement, String sql) throws PersistenceException,
1091 			DAOException;
1092 
1093 	/***
1094 	 * Reads a list of objects using the object mapping stored or generated by
1095 	 * the given object mapping key and <code>PreparedStatement</code>
1096 	 * instance. The <code>PreparedStatement</code> instance must have all
1097 	 * parameters set before calling this method (using the
1098 	 * PreparedStatement.setXXX(index, value) methods). The objects will appear
1099 	 * in the list in the same order their coresponding records appear in the
1100 	 * <code>ResultSet</code> generated by the <code>PreparedStatement</code>
1101 	 * instance.
1102 	 * 
1103 	 * <br/><br/>No database connection will be opened. The object will be read
1104 	 * using the <code>PreparedStatement</code> passed as parameter. You must
1105 	 * remember to close the <code>PreparedStatement</code> yourself when you
1106 	 * are done with it.
1107 	 * 
1108 	 * <br/><br/>If no object mapping is stored by the given object mapping
1109 	 * key, a new object mapping will be attempted generated and stored by that
1110 	 * object mapping key. An object mapping can only be generated automatically
1111 	 * if the method key is either a</code> Class</code> instance, or a <code>
1112 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1113 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1114 	 * setObjectClass(Class theClass) method).
1115 	 * 
1116 	 * The <code>Class</code> instance should be the class of the objects to
1117 	 * be read, meaning if you want to read objects of class <code>Employee
1118 	 * </code> the <code>Class</code> instance should be that found at <code>
1119 	 * Employee.class</code>.
1120 	 * 
1121 	 * @param objectMappingKey
1122 	 *            The object mapping key by which the object mapping to be used
1123 	 *            is stored in the object mapping cache, in the persistence
1124 	 *            configuration used by this instance of the DAO class.
1125 	 * @param statement
1126 	 *            The <code>PreparedStatement</code> instance locating the
1127 	 *            list of objects to read.
1128 	 * @return A <code>List</code> of objects read from the database.
1129 	 * @throws PersistenceException
1130 	 *             If anything goes wrong during the read, if no persistence
1131 	 *             configuration is set, if the persistence configuration
1132 	 *             contains no object reader, or if no object mapping could be
1133 	 *             found nor generated from the given object mapping key.
1134 	 * @throws DAOException
1135 	 */
1136 	List readList(Object objectMappingKey, PreparedStatement statement)
1137 			throws PersistenceException, DAOException;
1138 
1139 	/***
1140 	 * Reads a list of objects using the object mapping stored or generated by
1141 	 * the given object mapping key and <code>PreparedStatement</code>
1142 	 * instance. The <code>PreparedStatement</code> instance must have all
1143 	 * parameters set before calling this method (using the
1144 	 * PreparedStatement.setXXX(index, value) methods). The objects will appear
1145 	 * in the list in the same order their coresponding records appear in the
1146 	 * <code>ResultSet</code> generated by the <code>PreparedStatement</code>
1147 	 * instance.
1148 	 * 
1149 	 * <br/><br/>No database connection will be opened. The object will be read
1150 	 * using the <code>PreparedStatement</code> passed as parameter. You must
1151 	 * remember to close the <code>PreparedStatement</code> yourself when you
1152 	 * are done with it.
1153 	 * 
1154 	 * <br/><br/>If no object mapping is stored by the given object mapping
1155 	 * key, a new object mapping will be attempted generated and stored by that
1156 	 * object mapping key. An object mapping can only be generated automatically
1157 	 * if the method key is either a</code> Class</code> instance, or a <code>
1158 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1159 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1160 	 * setObjectClass(Class theClass) method).
1161 	 * 
1162 	 * The <code>Class</code> instance should be the class of the objects to
1163 	 * be read, meaning if you want to read objects of class <code>Employee
1164 	 * </code> the <code>Class</code> instance should be that found at <code>
1165 	 * Employee.class</code>.
1166 	 * 
1167 	 * @param conn
1168 	 *            JDBC Connection.
1169 	 * @param objectMappingKey
1170 	 *            The object mapping key by which the object mapping to be used
1171 	 *            is stored in the object mapping cache, in the persistence
1172 	 *            configuration used by this instance of the DAO class.
1173 	 * @param statement
1174 	 *            The <code>PreparedStatement</code> instance locating the
1175 	 *            list of objects to read.
1176 	 * @return A <code>List</code> of objects read from the database.
1177 	 * @throws PersistenceException
1178 	 *             If anything goes wrong during the read, if no persistence
1179 	 *             configuration is set, if the persistence configuration
1180 	 *             contains no object reader, or if no object mapping could be
1181 	 *             found nor generated from the given object mapping key.
1182 	 * @throws DAOException
1183 	 */
1184 	List readList(Connection conn, Object objectMappingKey,
1185 			PreparedStatement statement) throws PersistenceException,
1186 			DAOException;
1187 
1188 	/***
1189 	 * Reads a list of objects using the object mapping stored or generated by
1190 	 * the given object mapping key, and a <code>PreparedStatement</code>
1191 	 * instance created from the sql parameter, and the parameter collection. A
1192 	 * <code>PreparedStatement</code> instance will be generated using the
1193 	 * connection obtained by calling getConnection(), and calling it's
1194 	 * prepareStatement(sql), where sql is the sql parameter passed in here as
1195 	 * parameter. Hence the sql parameter must match the format used with
1196 	 * prepared statements (? - mark for parameters)
1197 	 * 
1198 	 * <br/><br/>The objects will appear in the list in the same order their
1199 	 * coresponding records appear in the <code>ResultSet</code> generated by
1200 	 * the <code>PreparedStatement</code> instance.
1201 	 * 
1202 	 * <br/><br/>A connection to the database will be obtained from the
1203 	 * getConnection() method of this instance.
1204 	 * 
1205 	 * <br/><br/>If no object mapping is stored by the given object mapping
1206 	 * key, a new object mapping will be attempted generated and stored by that
1207 	 * object mapping key. An object mapping can only be generated automatically
1208 	 * if the method key is either a</code> Class</code> instance, or a <code>
1209 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1210 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1211 	 * setObjectClass(Class theClass) method).
1212 	 * 
1213 	 * The <code>Class</code> instance should be the class of the objects to
1214 	 * be read, meaning if you want to read objects of class <code>Employee
1215 	 * </code> the <code>Class</code> instance should be that found at <code>
1216 	 * Employee.class</code>.
1217 	 * 
1218 	 * @param objectMappingKey
1219 	 *            The object mapping key by which the object mapping to be used
1220 	 *            is stored in the object mapping cache, in the persistence
1221 	 *            configuration used by this instance of the DAO class.
1222 	 * @param sql
1223 	 *            The SQL string to use to prepare a <code>PreparedStatement
1224 	 *            </code>.
1225 	 * @param parameters
1226 	 *            The parameters to insert into the <code>PreparedStatement
1227 	 *            </code>.
1228 	 * @return A <code>List</code> of objects read from the database.
1229 	 * @throws PersistenceException
1230 	 *             If anything goes wrong during the read, if no persistence
1231 	 *             configuration is set, if the persistence configuration
1232 	 *             contains no object reader, or if no object mapping could be
1233 	 *             found nor generated from the given object mapping key.
1234 	 * @throws DAOException
1235 	 */
1236 	List readList(Object objectMappingKey, String sql, Collection parameters)
1237 			throws PersistenceException, DAOException;
1238 
1239 	/***
1240 	 * Reads a list of objects using the object mapping stored or generated by
1241 	 * the given object mapping key, and a <code>PreparedStatement</code>
1242 	 * instance created from the sql parameter, and the parameter collection. A
1243 	 * <code>PreparedStatement</code> instance will be generated using the
1244 	 * connection obtained by calling getConnection(), and calling it's
1245 	 * prepareStatement(sql), where sql is the sql parameter passed in here as
1246 	 * parameter. Hence the sql parameter must match the format used with
1247 	 * prepared statements (? - mark for parameters)
1248 	 * 
1249 	 * <br/><br/>The objects will appear in the list in the same order their
1250 	 * coresponding records appear in the <code>ResultSet</code> generated by
1251 	 * the <code>PreparedStatement</code> instance.
1252 	 * 
1253 	 * <br/><br/>A connection to the database will be obtained from the
1254 	 * getConnection() method of this instance.
1255 	 * 
1256 	 * <br/><br/>If no object mapping is stored by the given object mapping
1257 	 * key, a new object mapping will be attempted generated and stored by that
1258 	 * object mapping key. An object mapping can only be generated automatically
1259 	 * if the method key is either a</code> Class</code> instance, or a <code>
1260 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1261 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1262 	 * setObjectClass(Class theClass) method).
1263 	 * 
1264 	 * The <code>Class</code> instance should be the class of the objects to
1265 	 * be read, meaning if you want to read objects of class <code>Employee
1266 	 * </code> the <code>Class</code> instance should be that found at <code>
1267 	 * Employee.class</code>.
1268 	 * 
1269 	 * @param conn
1270 	 *            JDBC Connection.
1271 	 * @param objectMappingKey
1272 	 *            The object mapping key by which the object mapping to be used
1273 	 *            is stored in the object mapping cache, in the persistence
1274 	 *            configuration used by this instance of the DAO class.
1275 	 * @param sql
1276 	 *            The SQL string to use to prepare a <code>PreparedStatement
1277 	 *            </code>.
1278 	 * @param parameters
1279 	 *            The parameters to insert into the <code>PreparedStatement
1280 	 *            </code>.
1281 	 * @return A <code>List</code> of objects read from the database.
1282 	 * @throws PersistenceException
1283 	 *             If anything goes wrong during the read, if no persistence
1284 	 *             configuration is set, if the persistence configuration
1285 	 *             contains no object reader, or if no object mapping could be
1286 	 *             found nor generated from the given object mapping key.
1287 	 * @throws DAOException
1288 	 */
1289 	List readList(Connection conn, Object objectMappingKey, String sql,
1290 			Collection parameters) throws PersistenceException, DAOException;
1291 
1292 	/***
1293 	 * Reads a list of objects using the object mapping stored or generated by
1294 	 * the given object mapping key, and a <code>PreparedStatement</code>
1295 	 * instance created from the sql parameter, and the parameter array. A
1296 	 * <code>PreparedStatement</code> instance will be generated using the
1297 	 * connection obtained by calling getConnection(), and calling it's
1298 	 * prepareStatement(sql), where sql is the sql parameter passed in here as
1299 	 * parameter. Hence the sql parameter must match the format used with
1300 	 * prepared statements (? - mark for parameters)
1301 	 * 
1302 	 * <br/><br/>The objects will appear in the list in the same order their
1303 	 * coresponding records appear in the <code>ResultSet</code> generated by
1304 	 * the <code>PreparedStatement</code> instance.
1305 	 * 
1306 	 * <br/><br/>A connection to the database will be obtained from the
1307 	 * getConnection() method of this instance.
1308 	 * 
1309 	 * <br/><br/>If no object mapping is stored by the given object mapping
1310 	 * key, a new object mapping will be attempted generated and stored by that
1311 	 * object mapping key. An object mapping can only be generated automatically
1312 	 * if the method key is either a</code> Class</code> instance, or a <code>
1313 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1314 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1315 	 * setObjectClass(Class theClass) method).
1316 	 * 
1317 	 * The <code>Class</code> instance should be the class of the objects to
1318 	 * be read, meaning if you want to read objects of class <code>Employee
1319 	 * </code> the <code>Class</code> instance should be that found at <code>
1320 	 * Employee.class</code>.
1321 	 * 
1322 	 * @param objectMappingKey
1323 	 *            The object mapping key by which the object mapping to be used
1324 	 *            is stored in the object mapping cache, in the persistence
1325 	 *            configuration used by this instance of the DAO class.
1326 	 * @param sql
1327 	 *            The SQL string to use to prepare a <code>PreparedStatement
1328 	 *            </code>.
1329 	 * @param parameters
1330 	 *            The parameters to insert into the <code>PreparedStatement
1331 	 *            </code>.
1332 	 * @return A <code>List</code> of objects read from the database.
1333 	 * @throws PersistenceException
1334 	 *             If anything goes wrong during the read, if no persistence
1335 	 *             configuration is set, if the persistence configuration
1336 	 *             contains no object reader, or if no object mapping could be
1337 	 *             found nor generated from the given object mapping key.
1338 	 * @throws DAOException
1339 	 */
1340 	List readList(Object objectMappingKey, String sql, Object[] parameters)
1341 			throws PersistenceException, DAOException;
1342 
1343 	/***
1344 	 * Reads a list of objects using the object mapping stored or generated by
1345 	 * the given object mapping key, and a <code>PreparedStatement</code>
1346 	 * instance created from the sql parameter, and the parameter array. A
1347 	 * <code>PreparedStatement</code> instance will be generated using the
1348 	 * connection obtained by calling getConnection(), and calling it's
1349 	 * prepareStatement(sql), where sql is the sql parameter passed in here as
1350 	 * parameter. Hence the sql parameter must match the format used with
1351 	 * prepared statements (? - mark for parameters)
1352 	 * 
1353 	 * <br/><br/>The objects will appear in the list in the same order their
1354 	 * coresponding records appear in the <code>ResultSet</code> generated by
1355 	 * the <code>PreparedStatement</code> instance.
1356 	 * 
1357 	 * <br/><br/>A connection to the database will be obtained from the
1358 	 * getConnection() method of this instance.
1359 	 * 
1360 	 * <br/><br/>If no object mapping is stored by the given object mapping
1361 	 * key, a new object mapping will be attempted generated and stored by that
1362 	 * object mapping key. An object mapping can only be generated automatically
1363 	 * if the method key is either a</code> Class</code> instance, or a <code>
1364 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1365 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1366 	 * setObjectClass(Class theClass) method).
1367 	 * 
1368 	 * The <code>Class</code> instance should be the class of the objects to
1369 	 * be read, meaning if you want to read objects of class <code>Employee
1370 	 * </code> the <code>Class</code> instance should be that found at <code>
1371 	 * Employee.class</code>.
1372 	 * 
1373 	 * @param conn
1374 	 *            JDBC Connection.
1375 	 * @param objectMappingKey
1376 	 *            The object mapping key by which the object mapping to be used
1377 	 *            is stored in the object mapping cache, in the persistence
1378 	 *            configuration used by this instance of the DAO class.
1379 	 * @param sql
1380 	 *            The SQL string to use to prepare a <code>PreparedStatement
1381 	 *            </code>.
1382 	 * @param parameters
1383 	 *            The parameters to insert into the <code>PreparedStatement
1384 	 *            </code>.
1385 	 * @return A <code>List</code> of objects read from the database.
1386 	 * @throws PersistenceException
1387 	 *             If anything goes wrong during the read, if no persistence
1388 	 *             configuration is set, if the persistence configuration
1389 	 *             contains no object reader, or if no object mapping could be
1390 	 *             found nor generated from the given object mapping key.
1391 	 * @throws DAOException
1392 	 */
1393 	List readList(Connection conn, Object objectMappingKey, String sql,
1394 			Object[] parameters) throws PersistenceException, DAOException;
1395 
1396 	/***
1397 	 * Reads a list of objects from the database using the object mapping stored
1398 	 * or generated by the given object mapping key, and the given SQL string.
1399 	 * The objects will appear in the list in the same order their coresponding
1400 	 * records appear in the <code>ResultSet</code> generated by the SQL
1401 	 * string.
1402 	 * 
1403 	 * <br/><br/>The filter passed as parameter can include or exclude the
1404 	 * records as they are iterated. If a filter excludes a record it will not
1405 	 * be included in the list of objects read. A filter can also end the
1406 	 * reading by signalling that it will not accept anymore records. No more
1407 	 * records will then be iterated, and the objects read so far will be
1408 	 * returned. If null is passed in the filter parameter no filtering will
1409 	 * occur, and all records located by the SQL string will be included in the
1410 	 * returned list.
1411 	 * 
1412 	 * <br/><br/>A connection to the database will be obtained from the
1413 	 * getConnection() method of this instance.
1414 	 * 
1415 	 * <br/><br/>If no object mapping is stored by the given object mapping
1416 	 * key, a new object mapping will be attempted generated and stored by that
1417 	 * object mapping key. An object mapping can only be generated automatically
1418 	 * if the method key is either a</code> Class</code> instance, or a <code>
1419 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1420 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1421 	 * setObjectClass(Class theClass) method).
1422 	 * 
1423 	 * <br/><br/>The <code>Class</code> instance should be the class of the
1424 	 * objects to be read, meaning if you want to read objects of class <code>
1425 	 * Employee</code> the <code>Class</code> instance should be that found
1426 	 * at <code>Employee.class</code>.
1427 	 * 
1428 	 * @param objectMappingKey
1429 	 *            The object mapping key by which the object mapping to be used
1430 	 *            is stored in the object mapping cache, in the persistence
1431 	 *            configuration used by this instance of the DAO class.
1432 	 * @param sql
1433 	 *            The SQL string locating the records to read into objects.
1434 	 * @param filter
1435 	 *            A filter that can include or exclude individual records.
1436 	 * @return A <code>List</code> of objects read from the database.
1437 	 * @throws PersistenceException
1438 	 *             If anything goes wrong during the read, if no persistence
1439 	 *             configuration is set, if the persistence configuration
1440 	 *             contains no object reader, or if no object mapping could be
1441 	 *             found nor generated from the given object mapping key.
1442 	 * @throws DAOException
1443 	 */
1444 	List readList(Object objectMappingKey, String sql, IReadFilter filter)
1445 			throws PersistenceException, DAOException;
1446 
1447 	/***
1448 	 * Reads a list of objects from the database using the object mapping stored
1449 	 * or generated by the given object mapping key, and the given SQL string.
1450 	 * The objects will appear in the list in the same order their coresponding
1451 	 * records appear in the <code>ResultSet</code> generated by the SQL
1452 	 * string.
1453 	 * 
1454 	 * <br/><br/>The filter passed as parameter can include or exclude the
1455 	 * records as they are iterated. If a filter excludes a record it will not
1456 	 * be included in the list of objects read. A filter can also end the
1457 	 * reading by signalling that it will not accept anymore records. No more
1458 	 * records will then be iterated, and the objects read so far will be
1459 	 * returned. If null is passed in the filter parameter no filtering will
1460 	 * occur, and all records located by the SQL string will be included in the
1461 	 * returned list.
1462 	 * 
1463 	 * <br/><br/>A connection to the database will be obtained from the
1464 	 * getConnection() method of this instance.
1465 	 * 
1466 	 * <br/><br/>If no object mapping is stored by the given object mapping
1467 	 * key, a new object mapping will be attempted generated and stored by that
1468 	 * object mapping key. An object mapping can only be generated automatically
1469 	 * if the method key is either a</code> Class</code> instance, or a <code>
1470 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1471 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1472 	 * setObjectClass(Class theClass) method).
1473 	 * 
1474 	 * <br/><br/>The <code>Class</code> instance should be the class of the
1475 	 * objects to be read, meaning if you want to read objects of class <code>
1476 	 * Employee</code> the <code>Class</code> instance should be that found
1477 	 * at <code>Employee.class</code>.
1478 	 * 
1479 	 * @param conn
1480 	 *            JDBC Connection.
1481 	 * @param objectMappingKey
1482 	 *            The object mapping key by which the object mapping to be used
1483 	 *            is stored in the object mapping cache, in the persistence
1484 	 *            configuration used by this instance of the DAO class.
1485 	 * @param sql
1486 	 *            The SQL string locating the records to read into objects.
1487 	 * @param filter
1488 	 *            A filter that can include or exclude individual records.
1489 	 * @return A <code>List</code> of objects read from the database.
1490 	 * @throws PersistenceException
1491 	 *             If anything goes wrong during the read, if no persistence
1492 	 *             configuration is set, if the persistence configuration
1493 	 *             contains no object reader, or if no object mapping could be
1494 	 *             found nor generated from the given object mapping key.
1495 	 * @throws DAOException
1496 	 */
1497 	List readList(Connection conn, Object objectMappingKey, String sql,
1498 			IReadFilter filter) throws PersistenceException, DAOException;
1499 
1500 	/***
1501 	 * Reads a list of objects from the given <code>ResultSet</code> using the
1502 	 * object mapping stored or generated by the given object mapping key. The
1503 	 * objects will appear in the list in the same order their coresponding
1504 	 * records appear in the <code>ResultSet</code>.
1505 	 * 
1506 	 * <br/><br/>The filter passed as parameter can include or exclude the
1507 	 * records as they are iterated. If a filter excludes a record it will not
1508 	 * be included in the list of objects read. A filter can also end the
1509 	 * reading by signalling that it will not accept anymore records. No more
1510 	 * records will then be iterated, and the objects read so far will be
1511 	 * returned. If null is passed in the filter parameter no filtering will
1512 	 * occur, and all records in the <code>ResultSet</code> will be included
1513 	 * in the returned list.
1514 	 * 
1515 	 * <br/><br/>No database connection will be opened. The object will be read
1516 	 * from the provided <code>ResultSet</code>. You must remember to close
1517 	 * the <code>ResultSet</code> yourself when you are done with it.
1518 	 * 
1519 	 * <br/><br/>If no object mapping is stored by the given object mapping
1520 	 * key, a new object mapping will be attempted generated and stored by that
1521 	 * object mapping key. An object mapping can only be generated automatically
1522 	 * if the method key is either a</code> Class</code> instance, or a <code>
1523 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1524 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1525 	 * setObjectClass(Class theClass) method).
1526 	 * 
1527 	 * <br/><br/>The <code>Class</code> instance should be the class of the
1528 	 * objects to be read, meaning if you want to read objects of class <code>
1529 	 * Employee</code> the <code>Class</code> instance should be that found
1530 	 * at <code>Employee.class</code>.
1531 	 * 
1532 	 * @param objectMappingKey
1533 	 *            The object mapping key by which the object mapping to be used
1534 	 *            is stored in the object mapping cache, in the persistence
1535 	 *            configuration used by this instance of the DAO class.
1536 	 * @param result
1537 	 *            The <code>ResultSet</code> to read the list of objects from.
1538 	 * @param filter
1539 	 *            A filter that can include or exclude individual records.
1540 	 * @return A <code>List</code> of objects read from the database.
1541 	 * @throws PersistenceException
1542 	 *             If anything goes wrong during the read, if no persistence
1543 	 *             configuration is set, if the persistence configuration
1544 	 *             contains no object reader, or if no object mapping could be
1545 	 *             found nor generated from the given object mapping key.
1546 	 * @throws DAOException
1547 	 */
1548 	List readList(Object objectMappingKey, ResultSet result, IReadFilter filter)
1549 			throws PersistenceException, DAOException;
1550 
1551 	/***
1552 	 * Reads a list of objects from the given <code>ResultSet</code> using the
1553 	 * object mapping stored or generated by the given object mapping key. The
1554 	 * objects will appear in the list in the same order their coresponding
1555 	 * records appear in the <code>ResultSet</code>.
1556 	 * 
1557 	 * <br/><br/>The filter passed as parameter can include or exclude the
1558 	 * records as they are iterated. If a filter excludes a record it will not
1559 	 * be included in the list of objects read. A filter can also end the
1560 	 * reading by signalling that it will not accept anymore records. No more
1561 	 * records will then be iterated, and the objects read so far will be
1562 	 * returned. If null is passed in the filter parameter no filtering will
1563 	 * occur, and all records in the <code>ResultSet</code> will be included
1564 	 * in the returned list.
1565 	 * 
1566 	 * <br/><br/>No database connection will be opened. The object will be read
1567 	 * from the provided <code>ResultSet</code>. You must remember to close
1568 	 * the <code>ResultSet</code> yourself when you are done with it.
1569 	 * 
1570 	 * <br/><br/>If no object mapping is stored by the given object mapping
1571 	 * key, a new object mapping will be attempted generated and stored by that
1572 	 * object mapping key. An object mapping can only be generated automatically
1573 	 * if the method key is either a</code> Class</code> instance, or a <code>
1574 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1575 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1576 	 * setObjectClass(Class theClass) method).
1577 	 * 
1578 	 * <br/><br/>The <code>Class</code> instance should be the class of the
1579 	 * objects to be read, meaning if you want to read objects of class <code>
1580 	 * Employee</code> the <code>Class</code> instance should be that found
1581 	 * at <code>Employee.class</code>.
1582 	 * 
1583 	 * @param conn
1584 	 *            JDBC Connection.
1585 	 * @param objectMappingKey
1586 	 *            The object mapping key by which the object mapping to be used
1587 	 *            is stored in the object mapping cache, in the persistence
1588 	 *            configuration used by this instance of the DAO class.
1589 	 * @param result
1590 	 *            The <code>ResultSet</code> to read the list of objects from.
1591 	 * @param filter
1592 	 *            A filter that can include or exclude individual records.
1593 	 * @return A <code>List</code> of objects read from the database.
1594 	 * @throws PersistenceException
1595 	 *             If anything goes wrong during the read, if no persistence
1596 	 *             configuration is set, if the persistence configuration
1597 	 *             contains no object reader, or if no object mapping could be
1598 	 *             found nor generated from the given object mapping key.
1599 	 * @throws DAOException
1600 	 */
1601 	List readList(Connection conn, Object objectMappingKey, ResultSet result,
1602 			IReadFilter filter) throws PersistenceException, DAOException;
1603 
1604 	/***
1605 	 * Reads a list of objects from the database using the given
1606 	 * <code>Statement</code> instance, the given SQL string and the object
1607 	 * mapping stored or generated by the given object mapping key. The objects
1608 	 * will appear in the list in the same order their coresponding records
1609 	 * appear in the <code>ResultSet</code> generated by the
1610 	 * <code>Statement</code>'s execution of the SQL string.
1611 	 * 
1612 	 * <br/><br/>The filter passed as parameter can include or exclude the
1613 	 * records as they are iterated. If a filter excludes a record it will not
1614 	 * be included in the list of objects read. A filter can also end the
1615 	 * reading by signalling that it will not accept anymore records. No more
1616 	 * records will then be iterated, and the objects read so far will be
1617 	 * returned. If null is passed in the filter parameter no filtering will
1618 	 * occur, and all records in the <code>ResultSet</code> will be included
1619 	 * in the returned list.
1620 	 * 
1621 	 * <br/><br/>Use this method if you need to use a special/customized
1622 	 * <code>Statement</code> instance. If you don't need a special/customized
1623 	 * <code>Statement</code> instance, the other <code>read</code> methods
1624 	 * will be easier to use.
1625 	 * 
1626 	 * <br/><br/>No database connection will be opened. The object will be read
1627 	 * from the provided <code>Statement</code>. You must remember to close
1628 	 * the <code>Statement</code> yourself when you are done with it.
1629 	 * 
1630 	 * <br/><br/>If no object mapping is stored by the given object mapping
1631 	 * key, a new object mapping will be attempted generated and stored by that
1632 	 * object mapping key. An object mapping can only be generated automatically
1633 	 * if the method key is either a</code> Class</code> instance, or a <code>
1634 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1635 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1636 	 * setObjectClass(Class theClass) method).
1637 	 * 
1638 	 * <br/><br/>The <code>Class</code> instance should be the class of the
1639 	 * objects to be read, meaning if you want to read objects of class <code>
1640 	 * Employee</code> the <code>Class</code> instance should be that found
1641 	 * at <code>Employee.class</code>.
1642 	 * 
1643 	 * @param objectMappingKey
1644 	 *            The object mapping key by which the object mapping to be used
1645 	 *            is stored in the object mapping cache, in the persistence
1646 	 *            configuration used by this instance of the DAO class.
1647 	 * @param statement
1648 	 *            The <code>Statement</code> instance to be used to execute
1649 	 *            the SQL string.
1650 	 * @param sql
1651 	 *            The SQL string to be executed by the <code>Statement</code>
1652 	 *            instance.
1653 	 * @param filter
1654 	 *            A filter that can include or exclude individual records.
1655 	 * @return A <code>List</code> of objects read from the database.
1656 	 * @throws PersistenceException
1657 	 *             If anything goes wrong during the read, if no persistence
1658 	 *             configuration is set, if the persistence configuration
1659 	 *             contains no object reader, or if no object mapping could be
1660 	 *             found nor generated from the given object mapping key.
1661 	 * @throws DAOException
1662 	 */
1663 	List readList(Object objectMappingKey, Statement statement, String sql,
1664 			IReadFilter filter) throws PersistenceException, DAOException;
1665 
1666 	/***
1667 	 * Reads a list of objects from the database using the given
1668 	 * <code>Statement</code> instance, the given SQL string and the object
1669 	 * mapping stored or generated by the given object mapping key. The objects
1670 	 * will appear in the list in the same order their coresponding records
1671 	 * appear in the <code>ResultSet</code> generated by the
1672 	 * <code>Statement</code>'s execution of the SQL string.
1673 	 * 
1674 	 * <br/><br/>The filter passed as parameter can include or exclude the
1675 	 * records as they are iterated. If a filter excludes a record it will not
1676 	 * be included in the list of objects read. A filter can also end the
1677 	 * reading by signalling that it will not accept anymore records. No more
1678 	 * records will then be iterated, and the objects read so far will be
1679 	 * returned. If null is passed in the filter parameter no filtering will
1680 	 * occur, and all records in the <code>ResultSet</code> will be included
1681 	 * in the returned list.
1682 	 * 
1683 	 * <br/><br/>Use this method if you need to use a special/customized
1684 	 * <code>Statement</code> instance. If you don't need a special/customized
1685 	 * <code>Statement</code> instance, the other <code>read</code> methods
1686 	 * will be easier to use.
1687 	 * 
1688 	 * <br/><br/>No database connection will be opened. The object will be read
1689 	 * from the provided <code>Statement</code>. You must remember to close
1690 	 * the <code>Statement</code> yourself when you are done with it.
1691 	 * 
1692 	 * <br/><br/>If no object mapping is stored by the given object mapping
1693 	 * key, a new object mapping will be attempted generated and stored by that
1694 	 * object mapping key. An object mapping can only be generated automatically
1695 	 * if the method key is either a</code> Class</code> instance, or a <code>
1696 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1697 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1698 	 * setObjectClass(Class theClass) method).
1699 	 * 
1700 	 * <br/><br/>The <code>Class</code> instance should be the class of the
1701 	 * objects to be read, meaning if you want to read objects of class <code>
1702 	 * Employee</code> the <code>Class</code> instance should be that found
1703 	 * at <code>Employee.class</code>.
1704 	 * 
1705 	 * @param conn
1706 	 *            JDBC Connection.
1707 	 * @param objectMappingKey
1708 	 *            The object mapping key by which the object mapping to be used
1709 	 *            is stored in the object mapping cache, in the persistence
1710 	 *            configuration used by this instance of the DAO class.
1711 	 * @param statement
1712 	 *            The <code>Statement</code> instance to be used to execute
1713 	 *            the SQL string.
1714 	 * @param sql
1715 	 *            The SQL string to be executed by the <code>Statement</code>
1716 	 *            instance.
1717 	 * @param filter
1718 	 *            A filter that can include or exclude individual records.
1719 	 * @return A <code>List</code> of objects read from the database.
1720 	 * @throws PersistenceException
1721 	 *             If anything goes wrong during the read, if no persistence
1722 	 *             configuration is set, if the persistence configuration
1723 	 *             contains no object reader, or if no object mapping could be
1724 	 *             found nor generated from the given object mapping key.
1725 	 * @throws DAOException
1726 	 */
1727 	List readList(Connection conn, Object objectMappingKey,
1728 			Statement statement, String sql, IReadFilter filter)
1729 			throws PersistenceException, DAOException;
1730 
1731 	/***
1732 	 * Reads a list of objects using the object mapping stored or generated by
1733 	 * the given object mapping key and <code>PreparedStatement</code>
1734 	 * instance. The <code>PreparedStatement</code> instance must have all
1735 	 * parameters set before calling this method (using the
1736 	 * PreparedStatement.setXXX(index, value) methods). The objects will appear
1737 	 * in the list in the same order their coresponding records appear in the
1738 	 * <code>ResultSet</code> generated by the <code>PreparedStatement</code>
1739 	 * instance.
1740 	 * 
1741 	 * <br/><br/>The filter passed as parameter can include or exclude the
1742 	 * records as they are iterated. If a filter excludes a record it will not
1743 	 * be included in the list of objects read. A filter can also end the
1744 	 * reading by signalling that it will not accept anymore records. No more
1745 	 * records will then be iterated, and the objects read so far will be
1746 	 * returned. If null is passed in the filter parameter no filtering will
1747 	 * occur, and all records in the <code>ResultSet</code> will be included
1748 	 * in the returned list.
1749 	 * 
1750 	 * <br/><br/>No database connection will be opened. The object will be read
1751 	 * from the provided <code>PreparedStatement</code>. You must remember to
1752 	 * close the <code>PreparedStatement</code> yourself when you are done
1753 	 * with it.
1754 	 * 
1755 	 * <br/><br/>If no object mapping is stored by the given object mapping
1756 	 * key, a new object mapping will be attempted generated and stored by that
1757 	 * object mapping key. An object mapping can only be generated automatically
1758 	 * if the method key is either a</code> Class</code> instance, or a <code>
1759 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1760 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1761 	 * setObjectClass(Class theClass) method).
1762 	 * 
1763 	 * <br/><br/>The <code>Class</code> instance should be the class of the
1764 	 * object to be , meaning if you want to store an object of class <code>
1765 	 * Employee</code> the <code>Class</code> instance should be that found
1766 	 * at <code>Employee.class</code>.
1767 	 * 
1768 	 * @param objectMappingKey
1769 	 *            The object mapping key by which the object mapping to be used
1770 	 *            is stored in the object mapping cache, in the persistence
1771 	 *            configuration used by this instance of the DAO class.
1772 	 * @param statement
1773 	 *            The <code>PreparedStatement</code> instance locating the
1774 	 *            list of objects to read.
1775 	 * @param filter
1776 	 *            A filter that can include or exclude individual records.
1777 	 * @return A <code>List</code> of objects read from the database.
1778 	 * @throws PersistenceException
1779 	 *             If anything goes wrong during the read, if no persistence
1780 	 *             configuration is set, if the persistence configuration
1781 	 *             contains no object reader, or if no object mapping could be
1782 	 *             found nor generated from the given object mapping key.
1783 	 * @throws DAOException
1784 	 */
1785 	List readList(Object objectMappingKey, PreparedStatement statement,
1786 			IReadFilter filter) throws PersistenceException, DAOException;
1787 
1788 	/***
1789 	 * Reads a list of objects using the object mapping stored or generated by
1790 	 * the given object mapping key and <code>PreparedStatement</code>
1791 	 * instance. The <code>PreparedStatement</code> instance must have all
1792 	 * parameters set before calling this method (using the
1793 	 * PreparedStatement.setXXX(index, value) methods). The objects will appear
1794 	 * in the list in the same order their coresponding records appear in the
1795 	 * <code>ResultSet</code> generated by the <code>PreparedStatement</code>
1796 	 * instance.
1797 	 * 
1798 	 * <br/><br/>The filter passed as parameter can include or exclude the
1799 	 * records as they are iterated. If a filter excludes a record it will not
1800 	 * be included in the list of objects read. A filter can also end the
1801 	 * reading by signalling that it will not accept anymore records. No more
1802 	 * records will then be iterated, and the objects read so far will be
1803 	 * returned. If null is passed in the filter parameter no filtering will
1804 	 * occur, and all records in the <code>ResultSet</code> will be included
1805 	 * in the returned list.
1806 	 * 
1807 	 * <br/><br/>No database connection will be opened. The object will be read
1808 	 * from the provided <code>PreparedStatement</code>. You must remember to
1809 	 * close the <code>PreparedStatement</code> yourself when you are done
1810 	 * with it.
1811 	 * 
1812 	 * <br/><br/>If no object mapping is stored by the given object mapping
1813 	 * key, a new object mapping will be attempted generated and stored by that
1814 	 * object mapping key. An object mapping can only be generated automatically
1815 	 * if the method key is either a</code> Class</code> instance, or a <code>
1816 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1817 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1818 	 * setObjectClass(Class theClass) method).
1819 	 * 
1820 	 * <br/><br/>The <code>Class</code> instance should be the class of the
1821 	 * object to be , meaning if you want to store an object of class <code>
1822 	 * Employee</code> the <code>Class</code> instance should be that found
1823 	 * at <code>Employee.class</code>.
1824 	 * 
1825 	 * @param conn
1826 	 *            JDBC Connection.
1827 	 * @param objectMappingKey
1828 	 *            The object mapping key by which the object mapping to be used
1829 	 *            is stored in the object mapping cache, in the persistence
1830 	 *            configuration used by this instance of the DAO class.
1831 	 * @param statement
1832 	 *            The <code>PreparedStatement</code> instance locating the
1833 	 *            list of objects to read.
1834 	 * @param filter
1835 	 *            A filter that can include or exclude individual records.
1836 	 * @return A <code>List</code> of objects read from the database.
1837 	 * @throws PersistenceException
1838 	 *             If anything goes wrong during the read, if no persistence
1839 	 *             configuration is set, if the persistence configuration
1840 	 *             contains no object reader, or if no object mapping could be
1841 	 *             found nor generated from the given object mapping key.
1842 	 * @throws DAOException
1843 	 */
1844 	List readList(Connection conn, Object objectMappingKey,
1845 			PreparedStatement statement, IReadFilter filter)
1846 			throws PersistenceException, DAOException;
1847 
1848 	/***
1849 	 * Reads a list of objects using the object mapping stored or generated by
1850 	 * the given object mapping key, and a <code>PreparedStatement</code>
1851 	 * instance created from the sql parameter, and the parameter array. A
1852 	 * <code>PreparedStatement</code> instance will be generated using the
1853 	 * connection obtained by calling getConnection(), and calling it's
1854 	 * prepareStatement(sql), where sql is the sql parameter passed in here as
1855 	 * parameter. Hence the sql parameter must match the format used with
1856 	 * prepared statements (? - mark for parameters)
1857 	 * 
1858 	 * <br/><br/>The objects will appear in the list in the same order their
1859 	 * coresponding records appear in the <code>ResultSet</code> generated by
1860 	 * the <code>PreparedStatement</code> instance.
1861 	 * 
1862 	 * <br/><br/>A connection to the database will be obtained from the
1863 	 * getConnection() method of this instance.
1864 	 * 
1865 	 * <br/><br/>The filter passed as parameter can include or exclude the
1866 	 * records as they are iterated. If a filter excludes a record it will not
1867 	 * be included in the list of objects read. A filter can also end the
1868 	 * reading by signalling that it will not accept anymore records. No more
1869 	 * records will then be iterated, and the objects read so far will be
1870 	 * returned. If null is passed in the filter parameter no filtering will
1871 	 * occur, and all records in the <code>ResultSet</code> will be included
1872 	 * in the returned list.
1873 	 * 
1874 	 * <br/><br/>If no object mapping is stored by the given object mapping
1875 	 * key, a new object mapping will be attempted generated and stored by that
1876 	 * object mapping key. An object mapping can only be generated automatically
1877 	 * if the method key is either a</code> Class</code> instance, or a <code>
1878 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1879 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1880 	 * setObjectClass(Class theClass) method).
1881 	 * 
1882 	 * The <code>Class</code> instance should be the class of the objects to
1883 	 * be read, meaning if you want to read objects of class <code>Employee
1884 	 * </code> the <code>Class</code> instance should be that found at <code>
1885 	 * Employee.class</code>.
1886 	 * 
1887 	 * 
1888 	 * @param objectMappingKey
1889 	 *            The object mapping key by which the object mapping to be used
1890 	 *            is stored in the object mapping cache, in the persistence
1891 	 *            configuration used by this instance of the DAO class.
1892 	 * @param sql
1893 	 *            The SQL string to use to prepare a <code>PreparedStatement
1894 	 *            </code>.
1895 	 * @param parameters
1896 	 *            The parameters to insert into the <code>PreparedStatement
1897 	 *            </code>.
1898 	 * @param filter
1899 	 *            A filter that can include or exclude individual records.
1900 	 * @return A <code>List</code> of objects read from the database.
1901 	 * @throws PersistenceException
1902 	 *             If anything goes wrong during the read, if no persistence
1903 	 *             configuration is set, if the persistence configuration
1904 	 *             contains no object reader, or if no object mapping could be
1905 	 *             found nor generated from the given object mapping key.
1906 	 * @throws DAOException
1907 	 */
1908 	List readList(Object objectMappingKey, String sql, Collection parameters,
1909 			IReadFilter filter) throws PersistenceException, DAOException;
1910 
1911 	/***
1912 	 * Reads a list of objects using the object mapping stored or generated by
1913 	 * the given object mapping key, and a <code>PreparedStatement</code>
1914 	 * instance created from the sql parameter, and the parameter array. A
1915 	 * <code>PreparedStatement</code> instance will be generated using the
1916 	 * connection obtained by calling getConnection(), and calling it's
1917 	 * prepareStatement(sql), where sql is the sql parameter passed in here as
1918 	 * parameter. Hence the sql parameter must match the format used with
1919 	 * prepared statements (? - mark for parameters)
1920 	 * 
1921 	 * <br/><br/>The objects will appear in the list in the same order their
1922 	 * coresponding records appear in the <code>ResultSet</code> generated by
1923 	 * the <code>PreparedStatement</code> instance.
1924 	 * 
1925 	 * <br/><br/>A connection to the database will be obtained from the
1926 	 * getConnection() method of this instance.
1927 	 * 
1928 	 * <br/><br/>The filter passed as parameter can include or exclude the
1929 	 * records as they are iterated. If a filter excludes a record it will not
1930 	 * be included in the list of objects read. A filter can also end the
1931 	 * reading by signalling that it will not accept anymore records. No more
1932 	 * records will then be iterated, and the objects read so far will be
1933 	 * returned. If null is passed in the filter parameter no filtering will
1934 	 * occur, and all records in the <code>ResultSet</code> will be included
1935 	 * in the returned list.
1936 	 * 
1937 	 * <br/><br/>If no object mapping is stored by the given object mapping
1938 	 * key, a new object mapping will be attempted generated and stored by that
1939 	 * object mapping key. An object mapping can only be generated automatically
1940 	 * if the method key is either a</code> Class</code> instance, or a <code>
1941 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
1942 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
1943 	 * setObjectClass(Class theClass) method).
1944 	 * 
1945 	 * The <code>Class</code> instance should be the class of the objects to
1946 	 * be read, meaning if you want to read objects of class <code>Employee
1947 	 * </code> the <code>Class</code> instance should be that found at <code>
1948 	 * Employee.class</code>.
1949 	 * 
1950 	 * @param conn
1951 	 *            JDBC Connection.
1952 	 * @param objectMappingKey
1953 	 *            The object mapping key by which the object mapping to be used
1954 	 *            is stored in the object mapping cache, in the persistence
1955 	 *            configuration used by this instance of the DAO class.
1956 	 * @param sql
1957 	 *            The SQL string to use to prepare a <code>PreparedStatement
1958 	 *            </code>.
1959 	 * @param parameters
1960 	 *            The parameters to insert into the <code>PreparedStatement
1961 	 *            </code>.
1962 	 * @param filter
1963 	 *            A filter that can include or exclude individual records.
1964 	 * @return A <code>List</code> of objects read from the database.
1965 	 * @throws PersistenceException
1966 	 *             If anything goes wrong during the read, if no persistence
1967 	 *             configuration is set, if the persistence configuration
1968 	 *             contains no object reader, or if no object mapping could be
1969 	 *             found nor generated from the given object mapping key.
1970 	 * @throws DAOException
1971 	 */
1972 	List readList(Connection conn, Object objectMappingKey, String sql,
1973 			Collection parameters, IReadFilter filter)
1974 			throws PersistenceException, DAOException;
1975 
1976 	/***
1977 	 * Reads a list of objects using the object mapping stored or generated by
1978 	 * the given object mapping key, and a <code>PreparedStatement</code>
1979 	 * instance created from the sql parameter, and the parameter array. A
1980 	 * <code>PreparedStatement</code> instance will be generated using the
1981 	 * connection obtained by calling getConnection(), and calling it's
1982 	 * prepareStatement(sql), where sql is the sql parameter passed in here as
1983 	 * parameter. Hence the sql parameter must match the format used with
1984 	 * prepared statements (? - mark for parameters)
1985 	 * 
1986 	 * <br/><br/>The objects will appear in the list in the same order their
1987 	 * coresponding records appear in the <code>ResultSet</code> generated by
1988 	 * the <code>PreparedStatement</code> instance.
1989 	 * 
1990 	 * <br/><br/>A connection to the database will be obtained from the
1991 	 * getConnection() method of this instance.
1992 	 * 
1993 	 * <br/><br/>The filter passed as parameter can include or exclude the
1994 	 * records as they are iterated. If a filter excludes a record it will not
1995 	 * be included in the list of objects read. A filter can also end the
1996 	 * reading by signalling that it will not accept anymore records. No more
1997 	 * records will then be iterated, and the objects read so far will be
1998 	 * returned. If null is passed in the filter parameter no filtering will
1999 	 * occur, and all records in the <code>ResultSet</code> will be included
2000 	 * in the returned list.
2001 	 * 
2002 	 * <br/><br/>If no object mapping is stored by the given object mapping
2003 	 * key, a new object mapping will be attempted generated and stored by that
2004 	 * object mapping key. An object mapping can only be generated automatically
2005 	 * if the method key is either a</code> Class</code> instance, or a <code>
2006 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2007 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2008 	 * setObjectClass(Class theClass) method).
2009 	 * 
2010 	 * The <code>Class</code> instance should be the class of the objects to
2011 	 * be read, meaning if you want to read objects of class <code>Employee
2012 	 * </code> the <code>Class</code> instance should be that found at <code>
2013 	 * Employee.class</code>.
2014 	 * 
2015 	 * 
2016 	 * @param objectMappingKey
2017 	 *            The object mapping key by which the object mapping to be used
2018 	 *            is stored in the object mapping cache, in the persistence
2019 	 *            configuration used by this instance of the DAO class.
2020 	 * @param sql
2021 	 *            The SQL string to use to prepare a <code>PreparedStatement
2022 	 *            </code>.
2023 	 * @param parameters
2024 	 *            The parameters to insert into the <code>PreparedStatement
2025 	 *            </code>.
2026 	 * @param filter
2027 	 *            A filter that can include or exclude individual records.
2028 	 * @return A <code>List</code> of objects read from the database.
2029 	 * @throws PersistenceException
2030 	 *             If anything goes wrong during the read, if no persistence
2031 	 *             configuration is set, if the persistence configuration
2032 	 *             contains no object reader, or if no object mapping could be
2033 	 *             found nor generated from the given object mapping key.
2034 	 * @throws DAOException
2035 	 */
2036 	List readList(Object objectMappingKey, String sql, Object[] parameters,
2037 			IReadFilter filter) throws PersistenceException, DAOException;
2038 
2039 	/***
2040 	 * Reads a list of objects using the object mapping stored or generated by
2041 	 * the given object mapping key, and a <code>PreparedStatement</code>
2042 	 * instance created from the sql parameter, and the parameter array. A
2043 	 * <code>PreparedStatement</code> instance will be generated using the
2044 	 * connection obtained by calling getConnection(), and calling it's
2045 	 * prepareStatement(sql), where sql is the sql parameter passed in here as
2046 	 * parameter. Hence the sql parameter must match the format used with
2047 	 * prepared statements (? - mark for parameters)
2048 	 * 
2049 	 * <br/><br/>The objects will appear in the list in the same order their
2050 	 * coresponding records appear in the <code>ResultSet</code> generated by
2051 	 * the <code>PreparedStatement</code> instance.
2052 	 * 
2053 	 * <br/><br/>A connection to the database will be obtained from the
2054 	 * getConnection() method of this instance.
2055 	 * 
2056 	 * <br/><br/>The filter passed as parameter can include or exclude the
2057 	 * records as they are iterated. If a filter excludes a record it will not
2058 	 * be included in the list of objects read. A filter can also end the
2059 	 * reading by signalling that it will not accept anymore records. No more
2060 	 * records will then be iterated, and the objects read so far will be
2061 	 * returned. If null is passed in the filter parameter no filtering will
2062 	 * occur, and all records in the <code>ResultSet</code> will be included
2063 	 * in the returned list.
2064 	 * 
2065 	 * <br/><br/>If no object mapping is stored by the given object mapping
2066 	 * key, a new object mapping will be attempted generated and stored by that
2067 	 * object mapping key. An object mapping can only be generated automatically
2068 	 * if the method key is either a</code> Class</code> instance, or a <code>
2069 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2070 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2071 	 * setObjectClass(Class theClass) method).
2072 	 * 
2073 	 * The <code>Class</code> instance should be the class of the objects to
2074 	 * be read, meaning if you want to read objects of class <code>Employee
2075 	 * </code> the <code>Class</code> instance should be that found at <code>
2076 	 * Employee.class</code>.
2077 	 * 
2078 	 * @param conn
2079 	 *            JDBC Connection.
2080 	 * @param objectMappingKey
2081 	 *            The object mapping key by which the object mapping to be used
2082 	 *            is stored in the object mapping cache, in the persistence
2083 	 *            configuration used by this instance of the DAO class.
2084 	 * @param sql
2085 	 *            The SQL string to use to prepare a <code>PreparedStatement
2086 	 *            </code>.
2087 	 * @param parameters
2088 	 *            The parameters to insert into the <code>PreparedStatement
2089 	 *            </code>.
2090 	 * @param filter
2091 	 *            A filter that can include or exclude individual records.
2092 	 * @return A <code>List</code> of objects read from the database.
2093 	 * @throws PersistenceException
2094 	 *             If anything goes wrong during the read, if no persistence
2095 	 *             configuration is set, if the persistence configuration
2096 	 *             contains no object reader, or if no object mapping could be
2097 	 *             found nor generated from the given object mapping key.
2098 	 * @throws DAOException
2099 	 */
2100 	List readList(Connection conn, Object objectMappingKey, String sql,
2101 			Object[] parameters, IReadFilter filter)
2102 			throws PersistenceException, DAOException;
2103 
2104 	/***
2105 	 * Same as <code>insert(Object objectMappingKey, Object object)</code>,
2106 	 * but uses object.getClass() as the object mapping key.
2107 	 * 
2108 	 * @param object
2109 	 *            The object containing the values to be inserted into the new
2110 	 *            record.
2111 	 * @return The number of records affected by this insert action, as returned
2112 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2113 	 * @throws PersistenceException
2114 	 *             If anything goes wrong during the insert, if no persistence
2115 	 *             configuration is set, if the persistence configuration
2116 	 *             contains no object writer, or if no object mapping could be
2117 	 *             found nor generated from the given object mapping key.
2118 	 */
2119 	int insert(Object object) throws PersistenceException, DAOException;
2120 
2121 	/***
2122 	 * Same as <code>insert(Object objectMappingKey, Object object)</code>,
2123 	 * but uses object.getClass() as the object mapping key.
2124 	 * 
2125 	 * @param conn
2126 	 *            JDBC Connection.
2127 	 * @param object
2128 	 *            The object containing the values to be inserted into the new
2129 	 *            record.
2130 	 * @return The number of records affected by this insert action, as returned
2131 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2132 	 * @throws PersistenceException
2133 	 *             If anything goes wrong during the insert, if no persistence
2134 	 *             configuration is set, if the persistence configuration
2135 	 *             contains no object writer, or if no object mapping could be
2136 	 *             found nor generated from the given object mapping key.
2137 	 * @throws DAOException.
2138 	 */
2139 	int insert(Connection conn, Object object) throws PersistenceException,
2140 			DAOException;
2141 
2142 	/***
2143 	 * Inserts a record in the database with the values from the given object
2144 	 * according to the object mapping stored or generated by the given object
2145 	 * mapping key.
2146 	 * 
2147 	 * <br/><br/>A connection to the database will be obtained from the
2148 	 * getConnection() method of this instance.
2149 	 * 
2150 	 * <br/><br/>If no object mapping is stored by the given object mapping
2151 	 * key, a new object mapping will be attempted generated and stored by that
2152 	 * object mapping key. An object mapping can only be generated automatically
2153 	 * if the method key is either a</code> Class</code> instance, or a <code>
2154 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2155 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2156 	 * setObjectClass(Class theClass) method).
2157 	 * 
2158 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2159 	 * object to be inserted, meaning if you want to insert an object of class
2160 	 * <code>Employee</code> the <code>Class</code> instance should be that
2161 	 * found at <code>Employee.class</code>.
2162 	 * 
2163 	 * <br/><br/>The SQL needed to insert the record will be generated
2164 	 * automatically based on the object mapping, and executed using a <code>
2165 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2166 	 * the values will be cached for later use to avoid the SQL generation
2167 	 * overhead.
2168 	 * 
2169 	 * @param objectMappingKey
2170 	 *            The object mapping key by which the object mapping to be used
2171 	 *            is stored in the object mapping cache, in the persistence
2172 	 *            configuration used by this instance of the DAO class.
2173 	 * @param object
2174 	 *            The object containing the values to be inserted into the new
2175 	 *            record.
2176 	 * @return The number of records affected by this insert action, as returned
2177 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2178 	 * @throws PersistenceException
2179 	 *             If anything goes wrong during the insert, if no persistence
2180 	 *             configuration is set, if the persistence configuration
2181 	 *             contains no object writer, or if no object mapping could be
2182 	 *             found nor generated from the given object mapping key.
2183 	 * @throws DAOException.
2184 	 */
2185 	int insert(Object objectMappingKey, Object object)
2186 			throws PersistenceException, DAOException;
2187 
2188 	/***
2189 	 * Inserts a record in the database with the values from the given object
2190 	 * according to the object mapping stored or generated by the given object
2191 	 * mapping key.
2192 	 * 
2193 	 * <br/><br/>A connection to the database will be obtained from the
2194 	 * getConnection() method of this instance.
2195 	 * 
2196 	 * <br/><br/>If no object mapping is stored by the given object mapping
2197 	 * key, a new object mapping will be attempted generated and stored by that
2198 	 * object mapping key. An object mapping can only be generated automatically
2199 	 * if the method key is either a</code> Class</code> instance, or a <code>
2200 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2201 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2202 	 * setObjectClass(Class theClass) method).
2203 	 * 
2204 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2205 	 * object to be inserted, meaning if you want to insert an object of class
2206 	 * <code>Employee</code> the <code>Class</code> instance should be that
2207 	 * found at <code>Employee.class</code>.
2208 	 * 
2209 	 * <br/><br/>The SQL needed to insert the record will be generated
2210 	 * automatically based on the object mapping, and executed using a <code>
2211 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2212 	 * the values will be cached for later use to avoid the SQL generation
2213 	 * overhead.
2214 	 * 
2215 	 * @param conn
2216 	 *            JDBC Connection.
2217 	 * @param objectMappingKey
2218 	 *            The object mapping key by which the object mapping to be used
2219 	 *            is stored in the object mapping cache, in the persistence
2220 	 *            configuration used by this instance of the DAO class.
2221 	 * @param object
2222 	 *            The object containing the values to be inserted into the new
2223 	 *            record.
2224 	 * @return The number of records affected by this insert action, as returned
2225 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2226 	 * @throws PersistenceException
2227 	 *             If anything goes wrong during the insert, if no persistence
2228 	 *             configuration is set, if the persistence configuration
2229 	 *             contains no object writer, or if no object mapping could be
2230 	 *             found nor generated from the given object mapping key.
2231 	 * @throws DAOException.
2232 	 */
2233 	int insert(Connection conn, Object objectMappingKey, Object object)
2234 			throws PersistenceException, DAOException;
2235 
2236 	/***
2237 	 * Same as
2238 	 * <code>insertBatch(Object objectMappingKey, Collection objects)</code>
2239 	 * but uses the class returned by the getClass() of the first element in the
2240 	 * collection as the object mapping key. The first element is extracted
2241 	 * using a standard Iterator.
2242 	 * 
2243 	 * @param objects
2244 	 *            The object containing the values to be inserted into the new
2245 	 *            record.
2246 	 * @return The number of records affected by this insert action, as returned
2247 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2248 	 * @throws PersistenceException
2249 	 *             If anything goes wrong during the insert, if no persistence
2250 	 *             configuration is set, if the persistence configuration
2251 	 *             contains no object writer, or if no object mapping could be
2252 	 *             found nor generated from the given object mapping key.
2253 	 */
2254 	int[] insertBatch(Collection objects) throws PersistenceException,
2255 			DAOException;
2256 
2257 	/***
2258 	 * Same as
2259 	 * <code>insertBatch(Object objectMappingKey, Collection objects)</code>
2260 	 * but uses the class returned by the getClass() of the first element in the
2261 	 * collection as the object mapping key. The first element is extracted
2262 	 * using a standard Iterator.
2263 	 * 
2264 	 * @param objects
2265 	 *            The object containing the values to be inserted into the new
2266 	 *            record.
2267 	 * @return The number of records affected by this insert action, as returned
2268 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2269 	 * @throws PersistenceException
2270 	 *             If anything goes wrong during the insert, if no persistence
2271 	 *             configuration is set, if the persistence configuration
2272 	 *             contains no object writer, or if no object mapping could be
2273 	 *             found nor generated from the given object mapping key.
2274 	 */
2275 	int[] insertBatch(Connection conn, Collection objects)
2276 			throws PersistenceException, DAOException;
2277 
2278 	/***
2279 	 * Inserts several records into the database with the values from the given
2280 	 * objects according to the object mapping stored or generated by the given
2281 	 * object mapping key.
2282 	 * 
2283 	 * <br/><br/>A connection to the database will be obtained from the
2284 	 * getConnection() method of this instance.
2285 	 * 
2286 	 * <br/><br/>If no object mapping is stored by the given object mapping
2287 	 * key, a new object mapping will be attempted generated and stored by that
2288 	 * object mapping key. An object mapping can only be generated automatically
2289 	 * if the method key is either a</code> Class</code> instance, or a <code>
2290 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2291 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2292 	 * setObjectClass(Class theClass) method).
2293 	 * 
2294 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2295 	 * objects to be inserted, meaning if you want to insert objects of class
2296 	 * <code>Employee</code> the <code>Class</code> instance should be that
2297 	 * found at <code>Employee.class</code>.
2298 	 * 
2299 	 * <br/><br/>The SQL needed to insert the record will be generated
2300 	 * automatically based on the object mapping, and executed using a <code>
2301 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2302 	 * the values will be cached for later use to avoid the SQL generation
2303 	 * overhead.
2304 	 * 
2305 	 * @param objectMappingKey
2306 	 *            The object mapping key by which the object mapping to be used
2307 	 *            is stored in the object mapping cache, in the persistence
2308 	 *            configuration used by this instance of the DAO class.
2309 	 * @param objects
2310 	 *            The object containing the values to be inserted into the new
2311 	 *            record.
2312 	 * @return The number of records affected by this insert action, as returned
2313 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2314 	 * @throws PersistenceException
2315 	 *             If anything goes wrong during the insert, if no persistence
2316 	 *             configuration is set, if the persistence configuration
2317 	 *             contains no object writer, or if no object mapping could be
2318 	 *             found nor generated from the given object mapping key.
2319 	 */
2320 	int[] insertBatch(Object objectMappingKey, Collection objects)
2321 			throws PersistenceException;
2322 
2323 	/***
2324 	 * Same as <code>update(Object objectMappingKey, Object object)</code> but
2325 	 * uses the object.getClass() as the object mapping key.
2326 	 * 
2327 	 * @param object
2328 	 *            The object containing the values to be update in the
2329 	 *            coresponding record.
2330 	 * @return The number of records affected by this update action, as returned
2331 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2332 	 * @throws PersistenceException
2333 	 *             If anything goes wrong during the update, if no persistence
2334 	 *             configuration is set, if the persistence configuration
2335 	 *             contains no object writer, or if no object mapping could be
2336 	 *             found nor generated from the given object mapping key.
2337 	 * @throws DAOException
2338 	 */
2339 	int update(Object object) throws PersistenceException, DAOException;
2340 
2341 	/***
2342 	 * Same as <code>update(Object objectMappingKey, Object object)</code> but
2343 	 * uses the object.getClass() as the object mapping key.
2344 	 * 
2345 	 * @param conn
2346 	 *            JDBC Connection.
2347 	 * @param object
2348 	 *            The object containing the values to be update in the
2349 	 *            coresponding record.
2350 	 * @return The number of records affected by this update action, as returned
2351 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2352 	 * @throws PersistenceException
2353 	 *             If anything goes wrong during the update, if no persistence
2354 	 *             configuration is set, if the persistence configuration
2355 	 *             contains no object writer, or if no object mapping could be
2356 	 *             found nor generated from the given object mapping key.
2357 	 * @throws DAOException
2358 	 */
2359 	int update(Connection conn, Object object) throws PersistenceException,
2360 			DAOException;
2361 
2362 	/***
2363 	 * Updates the record in the database coresponding to the given object, with
2364 	 * the values contained in this object, according to the object mapping
2365 	 * stored or generated by the given object mapping key.
2366 	 * 
2367 	 * <br/><br/>Do not use this method if the primary key value is also
2368 	 * changed during the update, or this method will have no effect. If you do
2369 	 * use it for an update where the primary key has changed, the primary key
2370 	 * value in the "where" clause of the SQL will contain the new primary key
2371 	 * value. Since no records, or perhaps another existing record, matches the
2372 	 * new, changed, primary key value, the update will have no effect. If you
2373 	 * need to update a record including it's primary key, use the other update
2374 	 * method.
2375 	 * 
2376 	 * <br/><br/>A connection to the database will be obtained from the
2377 	 * getConnection() method of this instance.
2378 	 * 
2379 	 * <br/><br/>If no object mapping is stored by the given object mapping
2380 	 * key, a new object mapping will be attempted generated and stored by that
2381 	 * object mapping key. An object mapping can only be generated automatically
2382 	 * if the method key is either a</code> Class</code> instance, or a <code>
2383 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2384 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2385 	 * setObjectClass(Class theClass) method).
2386 	 * 
2387 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2388 	 * object to be updated, meaning if you want to update an object of class
2389 	 * <code>Employee</code> the <code>Class</code> instance should be that
2390 	 * found at <code>Employee.class</code>.
2391 	 * 
2392 	 * <br/><br/>The SQL needed to update the record will be generated
2393 	 * automatically based on the object mapping, and executed using a <code>
2394 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2395 	 * the values will be cached for later use to avoid the SQL generation
2396 	 * overhead.
2397 	 * 
2398 	 * @param objectMappingKey
2399 	 *            The object mapping key by which the object mapping to be used
2400 	 *            is stored in the object mapping cache, in the persistence
2401 	 *            configuration used by this instance of the DAO class.
2402 	 * @param object
2403 	 *            The object containing the values to be update in the
2404 	 *            coresponding record.
2405 	 * @return The number of records affected by this update action, as returned
2406 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2407 	 * @throws PersistenceException
2408 	 *             If anything goes wrong during the update, if no persistence
2409 	 *             configuration is set, if the persistence configuration
2410 	 *             contains no object writer, or if no object mapping could be
2411 	 *             found nor generated from the given object mapping key.
2412 	 * @throws DAOException
2413 	 */
2414 	int update(Object objectMappingKey, Object object)
2415 			throws PersistenceException, DAOException;
2416 
2417 	/***
2418 	 * Updates the record in the database coresponding to the given object, with
2419 	 * the values contained in this object, according to the object mapping
2420 	 * stored or generated by the given object mapping key.
2421 	 * 
2422 	 * <br/><br/>Do not use this method if the primary key value is also
2423 	 * changed during the update, or this method will have no effect. If you do
2424 	 * use it for an update where the primary key has changed, the primary key
2425 	 * value in the "where" clause of the SQL will contain the new primary key
2426 	 * value. Since no records, or perhaps another existing record, matches the
2427 	 * new, changed, primary key value, the update will have no effect. If you
2428 	 * need to update a record including it's primary key, use the other update
2429 	 * method.
2430 	 * 
2431 	 * <br/><br/>A connection to the database will be obtained from the
2432 	 * getConnection() method of this instance.
2433 	 * 
2434 	 * <br/><br/>If no object mapping is stored by the given object mapping
2435 	 * key, a new object mapping will be attempted generated and stored by that
2436 	 * object mapping key. An object mapping can only be generated automatically
2437 	 * if the method key is either a</code> Class</code> instance, or a <code>
2438 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2439 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2440 	 * setObjectClass(Class theClass) method).
2441 	 * 
2442 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2443 	 * object to be updated, meaning if you want to update an object of class
2444 	 * <code>Employee</code> the <code>Class</code> instance should be that
2445 	 * found at <code>Employee.class</code>.
2446 	 * 
2447 	 * <br/><br/>The SQL needed to update the record will be generated
2448 	 * automatically based on the object mapping, and executed using a <code>
2449 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2450 	 * the values will be cached for later use to avoid the SQL generation
2451 	 * overhead.
2452 	 * 
2453 	 * @param conn
2454 	 *            JDBC Connection.
2455 	 * @param objectMappingKey
2456 	 *            The object mapping key by which the object mapping to be used
2457 	 *            is stored in the object mapping cache, in the persistence
2458 	 *            configuration used by this instance of the DAO class.
2459 	 * @param object
2460 	 *            The object containing the values to be update in the
2461 	 *            coresponding record.
2462 	 * @return The number of records affected by this update action, as returned
2463 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2464 	 * @throws PersistenceException
2465 	 *             If anything goes wrong during the update, if no persistence
2466 	 *             configuration is set, if the persistence configuration
2467 	 *             contains no object writer, or if no object mapping could be
2468 	 *             found nor generated from the given object mapping key.
2469 	 * @throws DAOException
2470 	 */
2471 	int update(Connection conn, Object objectMappingKey, Object object)
2472 			throws PersistenceException, DAOException;
2473 
2474 	/***
2475 	 * Same as
2476 	 * <code>updateByPrimaryKey(Object objectMappingKey, Object object, Object oldPrimaryKeyValue)</code>
2477 	 * but uses the object.getClass() as the object mapping key.
2478 	 * 
2479 	 * @param object
2480 	 *            The object containing the values to be update in the
2481 	 *            coresponding record.
2482 	 * @param oldPrimaryKeyValue
2483 	 *            The primary key value of the record to update, meaning the
2484 	 *            value of the primary key before it was changed in the object
2485 	 *            to update.
2486 	 * @return The number of records affected by this update action, as returned
2487 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2488 	 * @throws PersistenceException
2489 	 *             If anything goes wrong during the update, if no persistence
2490 	 *             configuration is set, if the persistence configuration
2491 	 *             contains no object writer, or if no object mapping could be
2492 	 *             found nor generated from the given object mapping key.
2493 	 * @throws DAOException
2494 	 */
2495 	int updateByPrimaryKey(Object object, Object oldPrimaryKeyValue)
2496 			throws PersistenceException, DAOException;
2497 
2498 	/***
2499 	 * Same as
2500 	 * <code>updateByPrimaryKey(Object objectMappingKey, Object object, Object oldPrimaryKeyValue)</code>
2501 	 * but uses the object.getClass() as the object mapping key.
2502 	 * 
2503 	 * @param conn
2504 	 *            JDBC Connection.
2505 	 * @param object
2506 	 *            The object containing the values to be update in the
2507 	 *            coresponding record.
2508 	 * @param oldPrimaryKeyValue
2509 	 *            The primary key value of the record to update, meaning the
2510 	 *            value of the primary key before it was changed in the object
2511 	 *            to update.
2512 	 * @return The number of records affected by this update action, as returned
2513 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2514 	 * @throws PersistenceException
2515 	 *             If anything goes wrong during the update, if no persistence
2516 	 *             configuration is set, if the persistence configuration
2517 	 *             contains no object writer, or if no object mapping could be
2518 	 *             found nor generated from the given object mapping key.
2519 	 * @throws DAOException
2520 	 */
2521 	int updateByPrimaryKey(Connection conn, Object object,
2522 			Object oldPrimaryKeyValue) throws PersistenceException,
2523 			DAOException;
2524 
2525 	/***
2526 	 * Updates the record in the database coresponding to the given object, with
2527 	 * the values contained in this object, according to the object mapping
2528 	 * stored or generated by the given object mapping key.
2529 	 * 
2530 	 * <br/><br/>Use this method when updating records in which you also change
2531 	 * the primary key value. This method inserts the old primary key value into
2532 	 * the "where" clause of the PreparedStatement, so the correct record is
2533 	 * updated.
2534 	 * 
2535 	 * <br/><br/>A connection to the database will be obtained from the
2536 	 * getConnection() method of this instance.
2537 	 * 
2538 	 * <br/><br/>If no object mapping is stored by the given object mapping
2539 	 * key, a new object mapping will be attempted generated and stored by that
2540 	 * object mapping key. An object mapping can only be generated automatically
2541 	 * if the method key is either a</code> Class</code> instance, or a <code>
2542 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2543 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2544 	 * setObjectClass(Class theClass) method).
2545 	 * 
2546 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2547 	 * object to be updated, meaning if you want to update an object of class
2548 	 * <code>Employee</code> the <code>Class</code> instance should be that
2549 	 * found at <code>Employee.class</code>.
2550 	 * 
2551 	 * <br/><br/>The SQL needed to update the record will be generated
2552 	 * automatically based on the object mapping, and executed using a <code>
2553 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2554 	 * the values will be cached for later use to avoid the SQL generation
2555 	 * overhead.
2556 	 * 
2557 	 * @param objectMappingKey
2558 	 *            The object mapping key by which the object mapping to be used
2559 	 *            is stored in the object mapping cache, in the persistence
2560 	 *            configuration used by this instance of the DAO class.
2561 	 * @param object
2562 	 *            The object containing the values to be update in the
2563 	 *            coresponding record.
2564 	 * @param oldPrimaryKeyValue
2565 	 *            The primary key value of the record to update, meaning the
2566 	 *            value of the primary key before it was changed in the object
2567 	 *            to update.
2568 	 * @return The number of records affected by this update action, as returned
2569 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2570 	 * @throws PersistenceException
2571 	 *             If anything goes wrong during the update, if no persistence
2572 	 *             configuration is set, if the persistence configuration
2573 	 *             contains no object writer, or if no object mapping could be
2574 	 *             found nor generated from the given object mapping key.
2575 	 * @throws DAOException
2576 	 */
2577 	int updateByPrimaryKey(Object objectMappingKey, Object object,
2578 			Object oldPrimaryKeyValue) throws PersistenceException,
2579 			DAOException;
2580 
2581 	/***
2582 	 * Updates the record in the database coresponding to the given object, with
2583 	 * the values contained in this object, according to the object mapping
2584 	 * stored or generated by the given object mapping key.
2585 	 * 
2586 	 * <br/><br/>Use this method when updating records in which you also change
2587 	 * the primary key value. This method inserts the old primary key value into
2588 	 * the "where" clause of the PreparedStatement, so the correct record is
2589 	 * updated.
2590 	 * 
2591 	 * <br/><br/>A connection to the database will be obtained from the
2592 	 * getConnection() method of this instance.
2593 	 * 
2594 	 * <br/><br/>If no object mapping is stored by the given object mapping
2595 	 * key, a new object mapping will be attempted generated and stored by that
2596 	 * object mapping key. An object mapping can only be generated automatically
2597 	 * if the method key is either a</code> Class</code> instance, or a <code>
2598 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2599 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2600 	 * setObjectClass(Class theClass) method).
2601 	 * 
2602 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2603 	 * object to be updated, meaning if you want to update an object of class
2604 	 * <code>Employee</code> the <code>Class</code> instance should be that
2605 	 * found at <code>Employee.class</code>.
2606 	 * 
2607 	 * <br/><br/>The SQL needed to update the record will be generated
2608 	 * automatically based on the object mapping, and executed using a <code>
2609 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2610 	 * the values will be cached for later use to avoid the SQL generation
2611 	 * overhead.
2612 	 * 
2613 	 * @param conn
2614 	 *            JDBC Connection.
2615 	 * @param objectMappingKey
2616 	 *            The object mapping key by which the object mapping to be used
2617 	 *            is stored in the object mapping cache, in the persistence
2618 	 *            configuration used by this instance of the DAO class.
2619 	 * @param object
2620 	 *            The object containing the values to be update in the
2621 	 *            coresponding record.
2622 	 * @param oldPrimaryKeyValue
2623 	 *            The primary key value of the record to update, meaning the
2624 	 *            value of the primary key before it was changed in the object
2625 	 *            to update.
2626 	 * @return The number of records affected by this update action, as returned
2627 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2628 	 * @throws PersistenceException
2629 	 *             If anything goes wrong during the update, if no persistence
2630 	 *             configuration is set, if the persistence configuration
2631 	 *             contains no object writer, or if no object mapping could be
2632 	 *             found nor generated from the given object mapping key.
2633 	 * @throws DAOException
2634 	 */
2635 	int updateByPrimaryKey(Connection conn, Object objectMappingKey,
2636 			Object object, Object oldPrimaryKeyValue)
2637 			throws PersistenceException, DAOException;
2638 
2639 	/***
2640 	 * Same as
2641 	 * <code>updateBatch(Object objectMappingKey, Collection objects)</code>
2642 	 * the class returned by the getClass() of the first element in the
2643 	 * collection as the object mapping key.
2644 	 * 
2645 	 * @param objects
2646 	 *            The collection of objects containing the values for the
2647 	 *            records to be updated.
2648 	 * @return An array containing the number of records affected by each update
2649 	 *         action, as returned by
2650 	 *         <code>PreparedStatement.executeBatch()</code>.
2651 	 * @throws PersistenceException
2652 	 *             If anything goes wrong during the update, if no persistence
2653 	 *             configuration is set, if the persistence configuration
2654 	 *             contains no object writer, or if no object mapping could be
2655 	 *             found nor generated from the given object mapping key.
2656 	 * @throws DAOException
2657 	 */
2658 	int[] updateBatch(Collection objects) throws PersistenceException,
2659 			DAOException;
2660 
2661 	/***
2662 	 * Same as
2663 	 * <code>updateBatch(Object objectMappingKey, Collection objects)</code>
2664 	 * the class returned by the getClass() of the first element in the
2665 	 * collection as the object mapping key.
2666 	 * 
2667 	 * @param conn
2668 	 *            JDBC Connection.
2669 	 * @param objects
2670 	 *            The collection of objects containing the values for the
2671 	 *            records to be updated.
2672 	 * @return An array containing the number of records affected by each update
2673 	 *         action, as returned by
2674 	 *         <code>PreparedStatement.executeBatch()</code>.
2675 	 * @throws PersistenceException
2676 	 *             If anything goes wrong during the update, if no persistence
2677 	 *             configuration is set, if the persistence configuration
2678 	 *             contains no object writer, or if no object mapping could be
2679 	 *             found nor generated from the given object mapping key.
2680 	 * @throws DAOException
2681 	 */
2682 	int[] updateBatch(Connection conn, Collection objects)
2683 			throws PersistenceException, DAOException;
2684 
2685 	/***
2686 	 * Updates the records in the database coresponding to the given collection
2687 	 * of objects, with the values contained in these objects, according to the
2688 	 * object mapping stored or generated by the given object mapping key. This
2689 	 * method uses JDBC batch updates to do the job, meaning all SQL statements
2690 	 * are batched and sent to the database in one go.
2691 	 * 
2692 	 * <br/><br/>Do not use this method if the primary key values are also
2693 	 * changed during the update, or this method will have no effect. If you do
2694 	 * use it for updates where the primary key has changed, the primary key
2695 	 * value in the "where" clause of the SQL will contain the new primary key
2696 	 * value. Since no records, or perhaps another existing record, match the
2697 	 * new, changed, primary key values, the update will have no effect. If you
2698 	 * need to batch update records including their primary keys, use the other
2699 	 * updateBatch method.
2700 	 * 
2701 	 * <br/><br/>A connection to the database will be obtained from the
2702 	 * getConnection() method of this instance.
2703 	 * 
2704 	 * <br/><br/>If no object mapping is stored by the given object mapping
2705 	 * key, a new object mapping will be attempted generated and stored by that
2706 	 * object mapping key. An object mapping can only be generated automatically
2707 	 * if the method key is either a</code> Class</code> instance, or a <code>
2708 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2709 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2710 	 * setObjectClass(Class theClass) method).
2711 	 * 
2712 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2713 	 * objects to be updated, meaning if you want to update objects of class
2714 	 * <code>Employee</code> the <code>Class</code> instance should be that
2715 	 * found at <code>Employee.class</code>.
2716 	 * 
2717 	 * <br/><br/>The SQL needed to update the record will be generated
2718 	 * automatically based on the object mapping, and executed using a <code>
2719 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2720 	 * the values will be cached for later use to avoid the SQL generation
2721 	 * overhead.
2722 	 * 
2723 	 * @param objectMappingKey
2724 	 *            The object mapping key by which the object mapping to be used
2725 	 *            is stored in the object mapping cache, in the persistence
2726 	 *            configuration used by this instance of the DAO class.
2727 	 * @param objects
2728 	 *            The collection of objects containing the values for the
2729 	 *            records to be updated.
2730 	 * @return An array containing the number of records affected by each update
2731 	 *         action, as returned by <code>PreparedStatement.executeBatch()
2732 	 *         </code>.
2733 	 * @throws PersistenceException
2734 	 *             If anything goes wrong during the update, if no persistence
2735 	 *             configuration is set, if the persistence configuration
2736 	 *             contains no object writer, or if no object mapping could be
2737 	 *             found nor generated from the given object mapping key.
2738 	 * @throws DAOException
2739 	 */
2740 	int[] updateBatch(Object objectMappingKey, Collection objects)
2741 			throws PersistenceException, DAOException;
2742 
2743 	/***
2744 	 * Updates the records in the database coresponding to the given collection
2745 	 * of objects, with the values contained in these objects, according to the
2746 	 * object mapping stored or generated by the given object mapping key. This
2747 	 * method uses JDBC batch updates to do the job, meaning all SQL statements
2748 	 * are batched and sent to the database in one go.
2749 	 * 
2750 	 * <br/><br/>Do not use this method if the primary key values are also
2751 	 * changed during the update, or this method will have no effect. If you do
2752 	 * use it for updates where the primary key has changed, the primary key
2753 	 * value in the "where" clause of the SQL will contain the new primary key
2754 	 * value. Since no records, or perhaps another existing record, match the
2755 	 * new, changed, primary key values, the update will have no effect. If you
2756 	 * need to batch update records including their primary keys, use the other
2757 	 * updateBatch method.
2758 	 * 
2759 	 * <br/><br/>A connection to the database will be obtained from the
2760 	 * getConnection() method of this instance.
2761 	 * 
2762 	 * <br/><br/>If no object mapping is stored by the given object mapping
2763 	 * key, a new object mapping will be attempted generated and stored by that
2764 	 * object mapping key. An object mapping can only be generated automatically
2765 	 * if the method key is either a</code> Class</code> instance, or a <code>
2766 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2767 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2768 	 * setObjectClass(Class theClass) method).
2769 	 * 
2770 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2771 	 * objects to be updated, meaning if you want to update objects of class
2772 	 * <code>Employee</code> the <code>Class</code> instance should be that
2773 	 * found at <code>Employee.class</code>.
2774 	 * 
2775 	 * <br/><br/>The SQL needed to update the record will be generated
2776 	 * automatically based on the object mapping, and executed using a <code>
2777 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2778 	 * the values will be cached for later use to avoid the SQL generation
2779 	 * overhead.
2780 	 * 
2781 	 * @param conn
2782 	 *            JDBC Connection.
2783 	 * @param objectMappingKey
2784 	 *            The object mapping key by which the object mapping to be used
2785 	 *            is stored in the object mapping cache, in the persistence
2786 	 *            configuration used by this instance of the DAO class.
2787 	 * @param objects
2788 	 *            The collection of objects containing the values for the
2789 	 *            records to be updated.
2790 	 * @return An array containing the number of records affected by each update
2791 	 *         action, as returned by <code>PreparedStatement.executeBatch()
2792 	 *         </code>.
2793 	 * @throws PersistenceException
2794 	 *             If anything goes wrong during the update, if no persistence
2795 	 *             configuration is set, if the persistence configuration
2796 	 *             contains no object writer, or if no object mapping could be
2797 	 *             found nor generated from the given object mapping key.
2798 	 * @throws DAOException
2799 	 */
2800 	int[] updateBatch(Connection conn, Object objectMappingKey,
2801 			Collection objects) throws PersistenceException, DAOException;
2802 
2803 	/***
2804 	 * Same as
2805 	 * <code>updateBatchByPrimaryKeys(Object objectMappingKey, Collection objects, Collection oldPrimaryKeys)</code>
2806 	 * the class returned by the getClass() of the first element in the
2807 	 * collection as the object mapping key.
2808 	 * 
2809 	 * @param objects
2810 	 *            The collection of objects containing the values for the
2811 	 *            records to be updated.
2812 	 * @param oldPrimaryKeys
2813 	 *            The collection of old primary keys each matching an object in
2814 	 *            the objects collection. The keys must be returned by the
2815 	 *            collection iterator in the same sequence as the objects they
2816 	 *            match are returned by the object.iterator().
2817 	 * @return An array containing the number of records affected by each update
2818 	 *         action, as returned by
2819 	 *         <code>PreparedStatement.executeBatch()</code>.
2820 	 * @throws PersistenceException
2821 	 *             If anything goes wrong during the update, if no persistence
2822 	 *             configuration is set, if the persistence configuration
2823 	 *             contains no object writer, or if no object mapping could be
2824 	 *             found nor generated from the given object mapping key.
2825 	 * @throws DAOException
2826 	 */
2827 
2828 	int[] updateBatchByPrimaryKeys(Collection objects, Collection oldPrimaryKeys)
2829 			throws PersistenceException, DAOException;
2830 
2831 	/***
2832 	 * Same as
2833 	 * <code>updateBatchByPrimaryKeys(Object objectMappingKey, Collection objects, Collection oldPrimaryKeys)</code>
2834 	 * the class returned by the getClass() of the first element in the
2835 	 * collection as the object mapping key.
2836 	 * 
2837 	 * @param conn
2838 	 *            JDBC Connection.
2839 	 * @param objects
2840 	 *            The collection of objects containing the values for the
2841 	 *            records to be updated.
2842 	 * @param oldPrimaryKeys
2843 	 *            The collection of old primary keys each matching an object in
2844 	 *            the objects collection. The keys must be returned by the
2845 	 *            collection iterator in the same sequence as the objects they
2846 	 *            match are returned by the object.iterator().
2847 	 * @return An array containing the number of records affected by each update
2848 	 *         action, as returned by
2849 	 *         <code>PreparedStatement.executeBatch()</code>.
2850 	 * @throws PersistenceException
2851 	 *             If anything goes wrong during the update, if no persistence
2852 	 *             configuration is set, if the persistence configuration
2853 	 *             contains no object writer, or if no object mapping could be
2854 	 *             found nor generated from the given object mapping key.
2855 	 * @throws DAOException
2856 	 */
2857 
2858 	int[] updateBatchByPrimaryKeys(Connection conn, Collection objects,
2859 			Collection oldPrimaryKeys) throws PersistenceException,
2860 			DAOException;
2861 
2862 	/***
2863 	 * Updates the records in the database coresponding to the given collection
2864 	 * of objects, with the values contained in these objects, according to the
2865 	 * object mapping stored or generated by the given object mapping key. This
2866 	 * method uses JDBC batch updates to do the job, meaning all SQL statements
2867 	 * are batched and sent to the database in one go.
2868 	 * 
2869 	 * <br/><br/>Use this method if the primary key values are also changed
2870 	 * during the update. The old primary key values are used to identify the
2871 	 * records to be updated. The values of the primary keys in the objects are
2872 	 * the values the the primary keys of the records will have after the
2873 	 * update.
2874 	 * 
2875 	 * <br/><br/>A connection to the database will be obtained from the
2876 	 * getConnection() method of this instance.
2877 	 * 
2878 	 * <br/><br/>If no object mapping is stored by the given object mapping
2879 	 * key, a new object mapping will be attempted generated and stored by that
2880 	 * object mapping key. An object mapping can only be generated automatically
2881 	 * if the method key is either a</code> Class</code> instance, or a <code>
2882 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2883 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2884 	 * setObjectClass(Class theClass) method).
2885 	 * 
2886 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2887 	 * objects to be updated, meaning if you want to update objects of class
2888 	 * <code>Employee</code> the <code>Class</code> instance should be that
2889 	 * found at <code>Employee.class</code>.
2890 	 * 
2891 	 * <br/><br/>The SQL needed to update the record will be generated
2892 	 * automatically based on the object mapping, and executed using a <code>
2893 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2894 	 * the values will be cached for later use to avoid the SQL generation
2895 	 * overhead.
2896 	 * 
2897 	 * @param objectMappingKey
2898 	 *            The object mapping key by which the object mapping to be used
2899 	 *            is stored in the object mapping cache, in the persistence
2900 	 *            configuration used by this instance of the DAO class.
2901 	 * @param objects
2902 	 *            The collection of objects containing the values for the
2903 	 *            records to be updated.
2904 	 * @param oldPrimaryKeys
2905 	 *            The collection of old primary keys each matching an object in
2906 	 *            the objects collection. The keys must be returned by the
2907 	 *            collection iterator in the same sequence as the objects they
2908 	 *            match are returned by the object.iterator().
2909 	 * @return An array containing the number of records affected by each update
2910 	 *         action, as returned by <code>PreparedStatement.executeBatch()
2911 	 *         </code>.
2912 	 * @throws PersistenceException
2913 	 *             If anything goes wrong during the update, if no persistence
2914 	 *             configuration is set, if the persistence configuration
2915 	 *             contains no object writer, or if no object mapping could be
2916 	 *             found nor generated from the given object mapping key.
2917 	 * @throws DAOException
2918 	 */
2919 	int[] updateBatchByPrimaryKeys(Object objectMappingKey, Collection objects,
2920 			Collection oldPrimaryKeys) throws PersistenceException,
2921 			DAOException;
2922 
2923 	/***
2924 	 * Updates the records in the database coresponding to the given collection
2925 	 * of objects, with the values contained in these objects, according to the
2926 	 * object mapping stored or generated by the given object mapping key. This
2927 	 * method uses JDBC batch updates to do the job, meaning all SQL statements
2928 	 * are batched and sent to the database in one go.
2929 	 * 
2930 	 * <br/><br/>Use this method if the primary key values are also changed
2931 	 * during the update. The old primary key values are used to identify the
2932 	 * records to be updated. The values of the primary keys in the objects are
2933 	 * the values the the primary keys of the records will have after the
2934 	 * update.
2935 	 * 
2936 	 * <br/><br/>A connection to the database will be obtained from the
2937 	 * getConnection() method of this instance.
2938 	 * 
2939 	 * <br/><br/>If no object mapping is stored by the given object mapping
2940 	 * key, a new object mapping will be attempted generated and stored by that
2941 	 * object mapping key. An object mapping can only be generated automatically
2942 	 * if the method key is either a</code> Class</code> instance, or a <code>
2943 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
2944 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
2945 	 * setObjectClass(Class theClass) method).
2946 	 * 
2947 	 * <br/><br/>The <code>Class</code> instance should be the class of the
2948 	 * objects to be updated, meaning if you want to update objects of class
2949 	 * <code>Employee</code> the <code>Class</code> instance should be that
2950 	 * found at <code>Employee.class</code>.
2951 	 * 
2952 	 * <br/><br/>The SQL needed to update the record will be generated
2953 	 * automatically based on the object mapping, and executed using a <code>
2954 	 * PreparedStatement</code>. The SQL string contains "?" characters for
2955 	 * the values will be cached for later use to avoid the SQL generation
2956 	 * overhead.
2957 	 * 
2958 	 * @param conn
2959 	 *            JDBC Connection.
2960 	 * @param objectMappingKey
2961 	 *            The object mapping key by which the object mapping to be used
2962 	 *            is stored in the object mapping cache, in the persistence
2963 	 *            configuration used by this instance of the DAO class.
2964 	 * @param objects
2965 	 *            The collection of objects containing the values for the
2966 	 *            records to be updated.
2967 	 * @param oldPrimaryKeys
2968 	 *            The collection of old primary keys each matching an object in
2969 	 *            the objects collection. The keys must be returned by the
2970 	 *            collection iterator in the same sequence as the objects they
2971 	 *            match are returned by the object.iterator().
2972 	 * @return An array containing the number of records affected by each update
2973 	 *         action, as returned by <code>PreparedStatement.executeBatch()
2974 	 *         </code>.
2975 	 * @throws PersistenceException
2976 	 *             If anything goes wrong during the update, if no persistence
2977 	 *             configuration is set, if the persistence configuration
2978 	 *             contains no object writer, or if no object mapping could be
2979 	 *             found nor generated from the given object mapping key.
2980 	 * @throws DAOException
2981 	 */
2982 	int[] updateBatchByPrimaryKeys(Connection conn, Object objectMappingKey,
2983 			Collection objects, Collection oldPrimaryKeys)
2984 			throws PersistenceException, DAOException;
2985 
2986 	/***
2987 	 * Same as <code>delete(Object objectMappingKey, Object object)</code> but
2988 	 * uses the object.getClass() as the object mapping key.
2989 	 * 
2990 	 * @param object
2991 	 *            The object containing the primary key of the record to be
2992 	 *            deleted.
2993 	 * @return The number of records affected by this delete action, as returned
2994 	 *         by <code>PreparedStatement.executeUpdate()</code>.
2995 	 * @throws PersistenceException
2996 	 *             If anything goes wrong during the delete, if no persistence
2997 	 *             configuration is set, if the persistence configuration
2998 	 *             contains no object writer, or if no object mapping could be
2999 	 *             found nor generated from the given object mapping key.
3000 	 * @throws DAOException
3001 	 */
3002 	int delete(Object object) throws PersistenceException, DAOException;
3003 
3004 	/***
3005 	 * Same as <code>delete(Object objectMappingKey, Object object)</code> but
3006 	 * uses the object.getClass() as the object mapping key.
3007 	 * 
3008 	 * @param conn
3009 	 *            JDBC Connection
3010 	 * @param object
3011 	 *            The object containing the primary key of the record to be
3012 	 *            deleted.
3013 	 * @return The number of records affected by this delete action, as returned
3014 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3015 	 * @throws PersistenceException
3016 	 *             If anything goes wrong during the delete, if no persistence
3017 	 *             configuration is set, if the persistence configuration
3018 	 *             contains no object writer, or if no object mapping could be
3019 	 *             found nor generated from the given object mapping key.
3020 	 * @throws DAOException
3021 	 */
3022 	int delete(Connection conn, Object object) throws PersistenceException,
3023 			DAOException;
3024 
3025 	/***
3026 	 * Deletes the record from the database coresponding to the given object,
3027 	 * according to the object mapping stored or generated by the given object
3028 	 * mapping key.
3029 	 * 
3030 	 * <br/><br/>A connection to the database will be obtained from the
3031 	 * getConnection() method of this instance.
3032 	 * 
3033 	 * <br/><br/>If no object mapping is stored by the given object mapping
3034 	 * key, a new object mapping will be attempted generated and stored by that
3035 	 * object mapping key. An object mapping can only be generated automatically
3036 	 * if the method key is either a</code> Class</code> instance, or a <code>
3037 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
3038 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
3039 	 * setObjectClass(Class theClass) method).
3040 	 * 
3041 	 * <br/><br/>The <code>Class</code> instance should be the class of the
3042 	 * object to be deleted, meaning if you want to delete an object of class
3043 	 * <code>Employee</code> the <code>Class</code> instance should be that
3044 	 * found at <code>Employee.class</code>.
3045 	 * 
3046 	 * <br/><br/>The SQL needed to delete the record will be generated
3047 	 * automatically based on the object mapping, and executed using a <code>
3048 	 * PreparedStatement</code>. The SQL string contains one or more "?"
3049 	 * characters for the primary key value and will thus be cached for later
3050 	 * use to avoid the SQL generation overhead.
3051 	 * 
3052 	 * @param objectMappingKey
3053 	 *            The object mapping key by which the object mapping to be used
3054 	 *            is stored in the object mapping cache, in the persistence
3055 	 *            configuration used by this instance of the DAO class.
3056 	 * @param object
3057 	 *            The object containing the primary key of the record to be
3058 	 *            deleted.
3059 	 * @return The number of records affected by this delete action, as returned
3060 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3061 	 * @throws PersistenceException
3062 	 *             If anything goes wrong during the delete, if no persistence
3063 	 *             configuration is set, if the persistence configuration
3064 	 *             contains no object writer, or if no object mapping could be
3065 	 *             found nor generated from the given object mapping key.
3066 	 * @throws DAOException
3067 	 */
3068 	int delete(Object objectMappingKey, Object object)
3069 			throws PersistenceException, DAOException;
3070 
3071 	/***
3072 	 * Deletes the record from the database coresponding to the given object,
3073 	 * according to the object mapping stored or generated by the given object
3074 	 * mapping key.
3075 	 * 
3076 	 * <br/><br/>A connection to the database will be obtained from the
3077 	 * getConnection() method of this instance.
3078 	 * 
3079 	 * <br/><br/>If no object mapping is stored by the given object mapping
3080 	 * key, a new object mapping will be attempted generated and stored by that
3081 	 * object mapping key. An object mapping can only be generated automatically
3082 	 * if the method key is either a</code> Class</code> instance, or a <code>
3083 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
3084 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
3085 	 * setObjectClass(Class theClass) method).
3086 	 * 
3087 	 * <br/><br/>The <code>Class</code> instance should be the class of the
3088 	 * object to be deleted, meaning if you want to delete an object of class
3089 	 * <code>Employee</code> the <code>Class</code> instance should be that
3090 	 * found at <code>Employee.class</code>.
3091 	 * 
3092 	 * <br/><br/>The SQL needed to delete the record will be generated
3093 	 * automatically based on the object mapping, and executed using a <code>
3094 	 * PreparedStatement</code>. The SQL string contains one or more "?"
3095 	 * characters for the primary key value and will thus be cached for later
3096 	 * use to avoid the SQL generation overhead.
3097 	 * 
3098 	 * @param objectMappingKey
3099 	 *            The object mapping key by which the object mapping to be used
3100 	 *            is stored in the object mapping cache, in the persistence
3101 	 *            configuration used by this instance of the DAO class.
3102 	 * @param object
3103 	 *            The object containing the primary key of the record to be
3104 	 *            deleted.
3105 	 * @return The number of records affected by this delete action, as returned
3106 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3107 	 * @throws PersistenceException
3108 	 *             If anything goes wrong during the delete, if no persistence
3109 	 *             configuration is set, if the persistence configuration
3110 	 *             contains no object writer, or if no object mapping could be
3111 	 *             found nor generated from the given object mapping key.
3112 	 * @throws DAOException
3113 	 */
3114 	int delete(Connection conn, Object objectMappingKey, Object object)
3115 			throws PersistenceException, DAOException;
3116 
3117 	/***
3118 	 * Same as
3119 	 * <code>deleteBatch(Object objectMappingKey, Collection objects)</code>
3120 	 * but uses the class returned by the getClass() method of the first object
3121 	 * in the collection, as returned by the collection iterator, as the object
3122 	 * mapping key.
3123 	 * 
3124 	 * @param objects
3125 	 *            The collection containing the objects to be deleted.
3126 	 * @return The number of records affected by this delete action, as returned
3127 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3128 	 * @throws PersistenceException
3129 	 *             If anything goes wrong during the delete, if no persistence
3130 	 *             configuration is set, if the persistence configuration
3131 	 *             contains no object writer, or if no object mapping could be
3132 	 *             found nor generated from the given object mapping key.
3133 	 * @throws DAOException
3134 	 */
3135 	int[] deleteBatch(Collection objects) throws PersistenceException,
3136 			DAOException;
3137 
3138 	/***
3139 	 * Same as
3140 	 * <code>deleteBatch(Object objectMappingKey, Collection objects)</code>
3141 	 * but uses the class returned by the getClass() method of the first object
3142 	 * in the collection, as returned by the collection iterator, as the object
3143 	 * mapping key.
3144 	 * 
3145 	 * @param objects
3146 	 *            The collection containing the objects to be deleted.
3147 	 * @return The number of records affected by this delete action, as returned
3148 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3149 	 * @throws PersistenceException
3150 	 *             If anything goes wrong during the delete, if no persistence
3151 	 *             configuration is set, if the persistence configuration
3152 	 *             contains no object writer, or if no object mapping could be
3153 	 *             found nor generated from the given object mapping key.
3154 	 * @throws DAOException
3155 	 */
3156 	int[] deleteBatch(Connection conn, Collection objects)
3157 			throws PersistenceException, DAOException;
3158 
3159 	/***
3160 	 * Deletes the records from the database coresponding to the given objects,
3161 	 * according to the object mapping stored or generated by the given object
3162 	 * mapping key. This method uses JDBC batch updates to do the job, meaning
3163 	 * the delete statements are batched up and sent to the database in one go.
3164 	 * 
3165 	 * <br/><br/>A connection to the database will be obtained from the
3166 	 * getConnection() method of this instance.
3167 	 * 
3168 	 * <br/><br/>If no object mapping is stored by the given object mapping
3169 	 * key, a new object mapping will be attempted generated and stored by that
3170 	 * object mapping key. An object mapping can only be generated automatically
3171 	 * if the method key is either a</code> Class</code> instance, or a <code>
3172 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
3173 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
3174 	 * setObjectClass(Class theClass) method).
3175 	 * 
3176 	 * <br/><br/>The <code>Class</code> instance should be the class of the
3177 	 * objects to be deleted, meaning if you want to delete objects of class
3178 	 * <code>Employee</code> the <code>Class</code> instance should be that
3179 	 * found at <code>Employee.class</code>.
3180 	 * 
3181 	 * <br/><br/>The SQL needed to delete the record will be generated
3182 	 * automatically based on the object mapping, and executed using a <code>
3183 	 * PreparedStatement</code>. The SQL string contains one or more "?"
3184 	 * characters for the primary key value and will thus be cached for later
3185 	 * use to avoid the SQL generation overhead.
3186 	 * 
3187 	 * @param objectMappingKey
3188 	 *            The object mapping key by which the object mapping to be used
3189 	 *            is stored in the object mapping cache, in the persistence
3190 	 *            configuration used by this instance of the DAO class.
3191 	 * @param objects
3192 	 *            The collection containing the objects to be deleted.
3193 	 * @return The number of records affected by this delete action, as returned
3194 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3195 	 * @throws PersistenceException
3196 	 *             If anything goes wrong during the delete, if no persistence
3197 	 *             configuration is set, if the persistence configuration
3198 	 *             contains no object writer, or if no object mapping could be
3199 	 *             found nor generated from the given object mapping key.
3200 	 */
3201 	int[] deleteBatch(Object objectMappingKey, Collection objects)
3202 			throws PersistenceException, DAOException;
3203 
3204 	/***
3205 	 * Deletes the records from the database coresponding to the given objects,
3206 	 * according to the object mapping stored or generated by the given object
3207 	 * mapping key. This method uses JDBC batch updates to do the job, meaning
3208 	 * the delete statements are batched up and sent to the database in one go.
3209 	 * 
3210 	 * <br/><br/>A connection to the database will be obtained from the
3211 	 * getConnection() method of this instance.
3212 	 * 
3213 	 * <br/><br/>If no object mapping is stored by the given object mapping
3214 	 * key, a new object mapping will be attempted generated and stored by that
3215 	 * object mapping key. An object mapping can only be generated automatically
3216 	 * if the method key is either a</code> Class</code> instance, or a <code>
3217 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
3218 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
3219 	 * setObjectClass(Class theClass) method).
3220 	 * 
3221 	 * <br/><br/>The <code>Class</code> instance should be the class of the
3222 	 * objects to be deleted, meaning if you want to delete objects of class
3223 	 * <code>Employee</code> the <code>Class</code> instance should be that
3224 	 * found at <code>Employee.class</code>.
3225 	 * 
3226 	 * <br/><br/>The SQL needed to delete the record will be generated
3227 	 * automatically based on the object mapping, and executed using a <code>
3228 	 * PreparedStatement</code>. The SQL string contains one or more "?"
3229 	 * characters for the primary key value and will thus be cached for later
3230 	 * use to avoid the SQL generation overhead.
3231 	 * 
3232 	 * @param conn
3233 	 *            JDBC Conection.
3234 	 * @param objectMappingKey
3235 	 *            The object mapping key by which the object mapping to be used
3236 	 *            is stored in the object mapping cache, in the persistence
3237 	 *            configuration used by this instance of the DAO class.
3238 	 * @param objects
3239 	 *            The collection containing the objects to be deleted.
3240 	 * @return The number of records affected by this delete action, as returned
3241 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3242 	 * @throws PersistenceException
3243 	 *             If anything goes wrong during the delete, if no persistence
3244 	 *             configuration is set, if the persistence configuration
3245 	 *             contains no object writer, or if no object mapping could be
3246 	 *             found nor generated from the given object mapping key.
3247 	 * @throws DAOException
3248 	 */
3249 	int[] deleteBatch(Connection conn, Object objectMappingKey,
3250 			Collection objects) throws PersistenceException, DAOException;
3251 
3252 	/***
3253 	 * Deletes the record from the database matching the given primary key,
3254 	 * according to the object mapping stored or generated by the given object
3255 	 * mapping key.
3256 	 * 
3257 	 * <br/><br/>A connection to the database will be obtained from the
3258 	 * getConnection() method of this instance.
3259 	 * 
3260 	 * <br/><br/>If no object mapping is stored by the given object mapping
3261 	 * key, a new object mapping will be attempted generated and stored by that
3262 	 * object mapping key. An object mapping can only be generated automatically
3263 	 * if the method key is either a</code> Class</code> instance, or a <code>
3264 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
3265 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
3266 	 * setObjectClass(Class theClass) method).
3267 	 * 
3268 	 * <br/><br/>The <code>Class</code> instance should be the class of the
3269 	 * object to be deleted, meaning if you want to delete an object of class
3270 	 * <code>Employee</code> the <code>Class</code> instance should be that
3271 	 * found at <code>Employee.class</code>.
3272 	 * 
3273 	 * <br/><br/>The SQL needed to delete the record will be generated
3274 	 * automatically based on the object mapping, and executed using a <code>
3275 	 * PreparedStatement</code>. The SQL string contains one or more "?"
3276 	 * characters for the primary key value and will thus be cached for later
3277 	 * use to avoid the SQL generation overhead.
3278 	 * 
3279 	 * @param objectMappingKey
3280 	 *            The object mapping key by which the object mapping to be used
3281 	 *            is stored in the object mapping cache, in the persistence
3282 	 *            configuration used by this instance of the DAO class.
3283 	 * @param primaryKey
3284 	 *            The primary key matching the record to be deleted.
3285 	 * @return The number of records affected by this delete action, as returned
3286 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3287 	 * @throws PersistenceException
3288 	 *             If anything goes wrong during the delete, if no persistence
3289 	 *             configuration is set, if the persistence configuration
3290 	 *             contains no object writer, or if no object mapping could be
3291 	 *             found nor generated from the given object mapping key.
3292 	 * @throws DAOException
3293 	 */
3294 	int deleteByPrimaryKey(Object objectMappingKey, Object primaryKey)
3295 			throws PersistenceException, DAOException;
3296 
3297 	/***
3298 	 * Deletes the record from the database matching the given primary key,
3299 	 * according to the object mapping stored or generated by the given object
3300 	 * mapping key.
3301 	 * 
3302 	 * <br/><br/>A connection to the database will be obtained from the
3303 	 * getConnection() method of this instance.
3304 	 * 
3305 	 * <br/><br/>If no object mapping is stored by the given object mapping
3306 	 * key, a new object mapping will be attempted generated and stored by that
3307 	 * object mapping key. An object mapping can only be generated automatically
3308 	 * if the method key is either a</code> Class</code> instance, or a <code>
3309 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
3310 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
3311 	 * setObjectClass(Class theClass) method).
3312 	 * 
3313 	 * <br/><br/>The <code>Class</code> instance should be the class of the
3314 	 * object to be deleted, meaning if you want to delete an object of class
3315 	 * <code>Employee</code> the <code>Class</code> instance should be that
3316 	 * found at <code>Employee.class</code>.
3317 	 * 
3318 	 * <br/><br/>The SQL needed to delete the record will be generated
3319 	 * automatically based on the object mapping, and executed using a <code>
3320 	 * PreparedStatement</code>. The SQL string contains one or more "?"
3321 	 * characters for the primary key value and will thus be cached for later
3322 	 * use to avoid the SQL generation overhead.
3323 	 * 
3324 	 * @param conn
3325 	 *            JDBC Connection.
3326 	 * @param objectMappingKey
3327 	 *            The object mapping key by which the object mapping to be used
3328 	 *            is stored in the object mapping cache, in the persistence
3329 	 *            configuration used by this instance of the DAO class.
3330 	 * @param primaryKey
3331 	 *            The primary key matching the record to be deleted.
3332 	 * @return The number of records affected by this delete action, as returned
3333 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3334 	 * @throws PersistenceException
3335 	 *             If anything goes wrong during the delete, if no persistence
3336 	 *             configuration is set, if the persistence configuration
3337 	 *             contains no object writer, or if no object mapping could be
3338 	 *             found nor generated from the given object mapping key.
3339 	 * @throws DAOException
3340 	 */
3341 	int deleteByPrimaryKey(Connection conn, Object objectMappingKey,
3342 			Object primaryKey) throws PersistenceException, DAOException;
3343 
3344 	/***
3345 	 * Deletes the records from the database coresponding to the given primary
3346 	 * keys, according to the object mapping stored or generated by the given
3347 	 * object mapping key. This method uses JDBC batch updates to do the job,
3348 	 * meaning the delete statements are batched up and sent to the database in
3349 	 * one go.
3350 	 * 
3351 	 * <br/><br/>A connection to the database will be obtained from the
3352 	 * getConnection() method of this instance.
3353 	 * 
3354 	 * <br/><br/>If no object mapping is stored by the given object mapping
3355 	 * key, a new object mapping will be attempted generated and stored by that
3356 	 * object mapping key. An object mapping can only be generated automatically
3357 	 * if the method key is either a</code> Class</code> instance, or a <code>
3358 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
3359 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
3360 	 * setObjectClass(Class theClass) method).
3361 	 * 
3362 	 * <br/><br/>The <code>Class</code> instance should be the class of the
3363 	 * objects to be deleted, meaning if you want to delete objects of class
3364 	 * <code>Employee</code> the <code>Class</code> instance should be that
3365 	 * found at <code>Employee.class</code>.
3366 	 * 
3367 	 * <br/><br/>The SQL needed to delete the record will be generated
3368 	 * automatically based on the object mapping, and executed using a <code>
3369 	 * PreparedStatement</code>. The SQL string contains one or more "?"
3370 	 * characters for the primary key value and will thus be cached for later
3371 	 * use to avoid the SQL generation overhead.
3372 	 * 
3373 	 * @param objectMappingKey
3374 	 *            The object mapping key by which the object mapping to be used
3375 	 *            is stored in the object mapping cache, in the persistence
3376 	 *            configuration used by this instance of the DAO class.
3377 	 * @param primaryKeys
3378 	 *            The collection containing the primary keys of the records to
3379 	 *            be deleted.
3380 	 * @return The number of records affected by this delete action, as returned
3381 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3382 	 * @throws PersistenceException
3383 	 *             If anything goes wrong during the delete, if no persistence
3384 	 *             configuration is set, if the persistence configuration
3385 	 *             contains no object writer, or if no object mapping could be
3386 	 *             found nor generated from the given object mapping key.
3387 	 */
3388 	int[] deleteBatchByPrimaryKeys(Object objectMappingKey,
3389 			Collection primaryKeys) throws PersistenceException, DAOException;
3390 
3391 	/***
3392 	 * Deletes the records from the database coresponding to the given primary
3393 	 * keys, according to the object mapping stored or generated by the given
3394 	 * object mapping key. This method uses JDBC batch updates to do the job,
3395 	 * meaning the delete statements are batched up and sent to the database in
3396 	 * one go.
3397 	 * 
3398 	 * <br/><br/>A connection to the database will be obtained from the
3399 	 * getConnection() method of this instance.
3400 	 * 
3401 	 * <br/><br/>If no object mapping is stored by the given object mapping
3402 	 * key, a new object mapping will be attempted generated and stored by that
3403 	 * object mapping key. An object mapping can only be generated automatically
3404 	 * if the method key is either a</code> Class</code> instance, or a <code>
3405 	 * com.jenkov.mrpersister.impl.method.ObjectMappingKey</code> instance with
3406 	 * a <code>Class</code> instance set (calling ObjectMappingKey's
3407 	 * setObjectClass(Class theClass) method).
3408 	 * 
3409 	 * <br/><br/>The <code>Class</code> instance should be the class of the
3410 	 * objects to be deleted, meaning if you want to delete objects of class
3411 	 * <code>Employee</code> the <code>Class</code> instance should be that
3412 	 * found at <code>Employee.class</code>.
3413 	 * 
3414 	 * <br/><br/>The SQL needed to delete the record will be generated
3415 	 * automatically based on the object mapping, and executed using a <code>
3416 	 * PreparedStatement</code>. The SQL string contains one or more "?"
3417 	 * characters for the primary key value and will thus be cached for later
3418 	 * use to avoid the SQL generation overhead.
3419 	 * 
3420 	 * @param conn
3421 	 *            JDBC Connection
3422 	 * @param objectMappingKey
3423 	 *            The object mapping key by which the object mapping to be used
3424 	 *            is stored in the object mapping cache, in the persistence
3425 	 *            configuration used by this instance of the DAO class.
3426 	 * @param primaryKeys
3427 	 *            The collection containing the primary keys of the records to
3428 	 *            be deleted.
3429 	 * @return The number of records affected by this delete action, as returned
3430 	 *         by <code>PreparedStatement.executeUpdate()</code>.
3431 	 * @throws PersistenceException
3432 	 *             If anything goes wrong during the delete, if no persistence
3433 	 *             configuration is set, if the persistence configuration
3434 	 *             contains no object writer, or if no object mapping could be
3435 	 *             found nor generated from the given object mapping key.
3436 	 * @exception DAOException
3437 	 */
3438 	int[] deleteBatchByPrimaryKeys(Connection conn, Object objectMappingKey,
3439 			Collection primaryKeys) throws PersistenceException, DAOException;
3440 
3441 	/***
3442 	 * Executes the given SQL update. Creates a <code>Statement</code> using
3443 	 * the <code>Connection</code> stored inside this GenericDao instance,
3444 	 * then executes the SQL update using that <code>Statement</code>
3445 	 * instance.
3446 	 * 
3447 	 * @param sql
3448 	 *            The SQL udpate to execute.
3449 	 * @return The number of records affected by the update, as returned by
3450 	 *         <code>Statement.executeUpdate(sql)</code>.
3451 	 * @throws PersistenceException
3452 	 *             If a Statement cannot be created, or an error occurs when
3453 	 *             attempting to execute the update.
3454 	 * @throws DAOException
3455 	 */
3456 	int executeUpdate(String sql) throws PersistenceException, DAOException;
3457 
3458 	/***
3459 	 * Executes the given SQL update. Creates a <code>Statement</code> using
3460 	 * the <code>Connection</code> stored inside this GenericDao instance,
3461 	 * then executes the SQL update using that <code>Statement</code>
3462 	 * instance.
3463 	 * 
3464 	 * @param conn
3465 	 * @param sql
3466 	 *            The SQL udpate to execute.
3467 	 * @return The number of records affected by the update, as returned by
3468 	 *         <code>Statement.executeUpdate(sql)</code>.
3469 	 * @throws PersistenceException
3470 	 *             If a Statement cannot be created, or an error occurs when
3471 	 *             attempting to execute the update.
3472 	 * @throws DAOException
3473 	 */
3474 	int executeUpdate(Connection conn, String sql) throws PersistenceException,
3475 			DAOException;
3476 
3477 	/***
3478 	 * Executes the given SQL update. Creates a <code>PreparedStatement</code>
3479 	 * using the <code>Connection</code> stored inside this GenericDao
3480 	 * instance, then executes the SQL update using that
3481 	 * <code>PreparedStatement</code> instance. The parameters are inserted
3482 	 * into the <code>PreparedStatement</code> instance in the sequence they
3483 	 * occur in the <code>Iterator</code> returned by the parameter
3484 	 * collection. In most cases it is easiest to use a list as the collection.
3485 	 * 
3486 	 * @param sql
3487 	 *            The SQL udpate to execute.
3488 	 * @param parameters
3489 	 *            The parameters to be inserted into the
3490 	 *            <code>PreparedStatement</code>
3491 	 * @return The number of records affected by the update, as returned by
3492 	 *         <code>PreparedStatement.executeUpdate(sql)</code>.
3493 	 * @throws PersistenceException
3494 	 *             If a <code>PreparedStatement</code> cannot be created, or
3495 	 *             an error occurs when attempting to execute the update.
3496 	 */
3497 	int executeUpdate(String sql, Collection parameters)
3498 			throws PersistenceException, DAOException;;
3499 
3500 	/***
3501 	 * Executes the given SQL update. Creates a <code>PreparedStatement</code>
3502 	 * using the <code>Connection</code> stored inside this GenericDao
3503 	 * instance, then executes the SQL update using that
3504 	 * <code>PreparedStatement</code> instance. The parameters are inserted
3505 	 * into the <code>PreparedStatement</code> instance in the sequence they
3506 	 * occur in the <code>Iterator</code> returned by the parameter
3507 	 * collection. In most cases it is easiest to use a list as the collection.
3508 	 * 
3509 	 * @param conn
3510 	 *            JDBC Connection.
3511 	 * @param sql
3512 	 *            The SQL udpate to execute.
3513 	 * @param parameters
3514 	 *            The parameters to be inserted into the
3515 	 *            <code>PreparedStatement</code>
3516 	 * @return The number of records affected by the update, as returned by
3517 	 *         <code>PreparedStatement.executeUpdate(sql)</code>.
3518 	 * @throws PersistenceException
3519 	 *             If a <code>PreparedStatement</code> cannot be created, or
3520 	 *             an error occurs when attempting to execute the update.
3521 	 * @throws DAOException
3522 	 */
3523 	int executeUpdate(Connection conn, String sql, Collection parameters)
3524 			throws PersistenceException, DAOException;
3525 
3526 	/***
3527 	 * Executes the given SQL update. Creates a <code>PreparedStatement</code>
3528 	 * using the <code>Connection</code> stored inside this GenericDao
3529 	 * instance, then executes the SQL update using that
3530 	 * <code>PreparedStatement</code> instance. The parameters are inserted
3531 	 * into the <code>PreparedStatement</code> instance in the sequence they
3532 	 * occur in the parameter array.
3533 	 * 
3534 	 * @param sql
3535 	 *            The SQL udpate to execute.
3536 	 * @param parameters
3537 	 *            The parameters to be inserted into the
3538 	 *            <code>PreparedStatement</code>
3539 	 * @return The number of records affected by the update, as returned by
3540 	 *         <code>PreparedStatement.executeUpdate(sql)</code>.
3541 	 * @throws PersistenceException
3542 	 *             If a <code>PreparedStatement</code> cannot be created, or
3543 	 *             an error occurs when attempting to execute the update.
3544 	 */
3545 	int executeUpdate(String sql, Object[] parameters)
3546 			throws PersistenceException, DAOException;
3547 
3548 	/***
3549 	 * Executes the given SQL update. Creates a <code>PreparedStatement</code>
3550 	 * using the <code>Connection</code> stored inside this GenericDao
3551 	 * instance, then executes the SQL update using that
3552 	 * <code>PreparedStatement</code> instance. The parameters are inserted
3553 	 * into the <code>PreparedStatement</code> instance in the sequence they
3554 	 * occur in the parameter array.
3555 	 * 
3556 	 * @param conn
3557 	 *            JDBC Connection.
3558 	 * @param sql
3559 	 *            The SQL udpate to execute.
3560 	 * @param parameters
3561 	 *            The parameters to be inserted into the
3562 	 *            <code>PreparedStatement</code>
3563 	 * @return The number of records affected by the update, as returned by
3564 	 *         <code>PreparedStatement.executeUpdate(sql)</code>.
3565 	 * @throws PersistenceException
3566 	 *             If a <code>PreparedStatement</code> cannot be created, or
3567 	 *             an error occurs when attempting to execute the update.
3568 	 * @throws DAOException.
3569 	 */
3570 	int executeUpdate(Connection conn, String sql, Object[] parameters)
3571 			throws PersistenceException, DAOException;
3572 
3573 }