User's Manual

82 Chapter 9. Persistence Tutorial
System.out.println("First name = " + query.get("firstName") +
"; Last name = " + query.get("lastName") +
"; Group = " + query.get("groupName"));
}
Now suppose you want to get all users with a last name that is the same as the variable lName or
is Smith, and with a first name that matches the variable fName or is John. You could do this as
follows:
DataQuery query = session.retrieveQuery("UsersGroups");
FilterFactory factory = query.getFilterFactory();
Filter filter1 = factory.or().addFilter(factory.equals("lastName", lName))
.addFilter\
(factory.equals("lastName", "Smith"));
Filter filter2 = factory.or().addFilter(factory.equals("firstName", fName))
.addFilter\
(factory.equals("firstName", "John"));
query.addFilter(factory.and().addFitler(filter1).addFilter(filter2));
while (query.next()) {
System.out.println("First name = " + query.get("firstName") +
"; Last name = " + query.get("lastName") +
"; Group = " + query.get("groupName"));
}
These could also have been chained together in order to avoid creating any Filter variables, but this
was not done here for clarity.
Finally, if you want to add a bunch of "foo = :foo" statements to a query, you can use the convenience
methods provided by DataQuery. These methods delegate to FilterFactory and therefore handle the
Oracle null problem. For instance:
DataQuery query = session.retrieveQuery("UsersGroups");
if (includeFirstName) {
query.addEqualsFilter("firstName", fName);
}
if (includeLastName) {
query.addEqualsFilter("firstName", fName);
}
while (query.next()) {
System.out.println("First name = " + query.get("firstName") +
"; Last name = " + query.get("lastName") +
"; Group = " + query.get("groupName"));
}
Note
When setting dates, java.util.Date objects should be used instead of java.sql.Date objects because
java.sql.Dates do not have hours, minutes, or seconds.
When filtering a query that returns data objects (as opposed to simple java types), you must prepend
the name of the object attribute. For instance, if you want to retrieve all uses using a query, you would
follow the example below. In practice, you want to retrieve a DataCollection from the Session
but we are using a query here for demonstration purposes.