| :_basedir: |
| :_imagesdir: images/ |
| :grid: cols |
| :usage: |
| |
| [[index]] |
| |
| == Object Retrievalanchor:Object_Retrieval[] |
| |
| JDO provides persistence of objects. The logical next step after |
| persisting objects is to retrieve them for use in your application. |
| There are several ways to do this |
| |
| === Retrieve an object from its identityanchor:Retrieve_an_object_from_its_identity[] |
| |
| The simplest form of object retrieval is where we have the identity. |
| This is simply |
| |
| .... |
| Object obj = pm.getObjectById(identity); |
| |
| .... |
| |
| If the object is in the JDO cache then it is retrieved from there, |
| otherwise the JDO implementation goes to the datastore. When the object |
| is retrieved its fields are populated according to its Fetch Group. |
| |
| === Retrieve an object based on its Extentanchor:Retrieve_an_object_based_on_its_Extent[] |
| |
| A persistable class can be persisted with an *Extent* of all instances |
| of that type. You can use this to retrieve objects of the required type, |
| like this |
| |
| .... |
| Extent ex = pm.getExtent(MyClass.class, true); |
| Iterator iter = ex.iterator(); |
| while (iter.hasNext()) |
| { |
| MyClass obj = (MyClass)iter.next(); |
| ... |
| } |
| .... |
| |
| The second argument in the _getExtent_ call is whether to include |
| instances of subclasses. |
| |
| {empty} + |
| |
| |
| === Retrieve an object based on a criteriaanchor:Retrieve_an_object_based_on_a_criteria[] |
| |
| Where we want to retrieve all objects based on some criteria (e.g all |
| objects of class A where field 'x' of A is a certain value) we need to |
| use a query language. JDO2 provides 2 options here. JDOQL is |
| object-based and allows you to express your query in terms of the |
| classes and fields you are using. SQL is datastore-based and allows you |
| to express your query in terms of the datastore tables and columns. |
| |
| To give an example of a JDOQL query |
| |
| .... |
| Query q = pm.newQuery(MyClass.class, "field1 < value"); |
| q.declareParameters("int value"); |
| List results = q.execute(205); |
| Iterator iter = results.iterator(); |
| while (iter.hasNext()) |
| { |
| MyClass obj = (MyClass)iter.next(); |
| } |
| .... |
| |
| If the objects found by the query are in the JDO cache then they are |
| retrieved from there, otherwise the JDO implementation goes to the |
| datastore. When the objects are retrieved their fields are populated |
| according to the Fetch Group. |
| |