To facilitate reuse of queries users can assign symbolic names to them and store such named queries in a DataMap. Normally this is done by creating a query in CayenneModeler. Storing queries in a DataMap reduces the amount of code and speeds up query creation process.

This example shows how to get a shared instance of a stored query, and use it as a template for customized query.

DataContext context = ... // assume this exists

// 1. lookup prototype

// note a cast to SelectQuery... Generally DataMap can store any type of queries
SelectQuery prototype = (SelectQuery) context.getEntityResolver().lookupQuery("MySelect");

// 2. customize query
Map params = new HashMap();
params.put("aname", "Monet");
SelectQuery query = prototype.queryWithParameters(params);

// 3. execute query
List objects = context.performQuery(query);

DataContext supports running a named query with preset parameters directly:

DataContext context = ... // assume this exists

// "false" indicates that a cached result should be used if available 
List objects = context.performQuery("MySelect", false);