Query Components

The JDO query facility applies a Boolean filter to a collection of candidate instances and returns the instances that evaluate to true. The collection of candidate instances can be either an Extent or a Collection. The class of candidate instances is another query component. Instances are returned in the query result only if they are instances of the candidate class.

Let’s begin by examining a method that performs a query that accesses Customer instances in the Media Mania model. We assume that an application has started a transaction and called queryCustomers( ), passing the PersistenceManager instance and values to filter the Customer instances to those whose addresses are in a specific city and state.

public static void queryCustomers(PersistenceManager pm,
                                  String city, String state) {
    Extent customerExtent = pm.getExtent(Customer.class, true);     [1]
    String filter = "address.city == city && state == address.state";     [2]
    Query query = pm.newQuery(customerExtent, filter);     [3]
    query.declareParameters("String city, String state");     [4]
    query.setOrdering(     [5]
        "address.zipcode ascending, lastName ascending, firstName ascending");
    Collection result = (Collection) query.execute(city, state);     [6]
    Iterator iter = result.iterator(  );
    while (iter.hasNext(  )) {     [7] Customer customer = (Customer) iter.next( ); Address address = customer.getAddress( ); System.out.print(address.getZipcode( )); System.out.print(" "); System.out.print(customer.getFirstName( )); System.out.print(" "); ...

Get Java Data Objects now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.