View Javadoc

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