WebSphere eXtreme Scale Product Overview > Tutorials > Tutorials, examples, and samples > ObjectQuery tutorial
ObjectQuery tutorial - step 3
With the following step, you can create an ObjectGrid with two maps and a schema for the maps with a relationship, then insert objects into the cache and later retrieve them using a simple query.
Before you begin
Be sure you have completed ObjectQuery tutorial - step 2 prior to proceeding with this step.In this example, there are two maps, each with a single Java™ type mapped to it. The Order map has OrderBean objects and the Customer map has CustomerBean objects in it.
Procedure
Define maps with a relationship.
OrderBean.java public class OrderBean implements Serializable { String orderNumber; java.util.Date date; String customerId; String itemName; int quantity; double price; }The OrderBean no longer has the customerName in it. Instead, it has the customerId, which is the primary key for the CustomerBean object and the Customer map.
CustomerBean.java public class CustomerBean implements Serializable{ private static final long serialVersionUID = 1L; String id; String firstName; String surname; String address; String phoneNumber; }
The relationship between the two types or Maps follows:
Application.java public class Application { static public void main(String [] args) throws Exception { ObjectGrid og = ObjectGridManagerFactory.getObjectGridManager().createObjectGrid(); og.defineMap("Order"); og.defineMap("Customer"); // Define the schema QueryConfig queryCfg = new QueryConfig(); queryCfg.addQueryMapping(new QueryMapping( "Order", OrderBean.class.getName(), "orderNumber", QueryMapping.FIELD_ACCESS)); queryCfg.addQueryMapping(new QueryMapping( "Customer", CustomerBean.class.getName(), "id", QueryMapping.FIELD_ACCESS)); queryCfg.addQueryRelationship(new QueryRelationship( OrderBean.class.getName(), CustomerBean.class.getName(), "customerId", null)); og.setQueryConfig(queryCfg); Session s = og.getSession(); ObjectMap orderMap = s.getMap("Order"); ObjectMap custMap = s.getMap("Customer"); s.begin(); CustomerBean cust = new CustomerBean(); cust.address = "Main Street"; cust.firstName = "John"; cust.surname = "Smith"; cust.id = "C001"; cust.phoneNumber = "5555551212"; custMap.insert(cust.id, cust); OrderBean o = new OrderBean(); o.customerId = cust.id; o.date = new java.util.Date(); o.itemName = "Widget"; o.orderNumber = "1"; o.price = 99.99; o.quantity = 1; orderMap.insert(o.orderNumber, o); s.commit(); s.begin(); ObjectQuery query = s.createObjectQuery( "SELECT c FROM Order o JOIN o.customerId as c WHERE o.itemName='Widget'"); Iterator result = query.getResultIterator(); cust = (CustomerBean) result.next(); System.out.println("Found order for customer: " + cust.firstName + " " + cust.surname); s.commit(); } }
The equivalent XML in the ObjectGrid deployment descriptor follows:
<?xml version="1.0" encoding="UTF-8"?> <objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd" xmlns="http://ibm.com/ws/objectgrid/config"> <objectGrids> <objectGrid name="CompanyGrid"> <backingMap name="Order"/> <backingMap name="Customer"/> <querySchema> <mapSchemas> <mapSchema mapName="Order" valueClass="com.mycompany.OrderBean" primaryKeyField="orderNumber" accessType="FIELD"/> <mapSchema mapName="Customer" valueClass="com.mycompany.CustomerBean" primaryKeyField="id" accessType="FIELD"/> </mapSchemas> <relationships> <relationship source="com.mycompany.OrderBean" target="com.mycompany.CustomerBean" relationField="customerId"/> </relationships> </querySchema> </objectGrid> </objectGrids> </objectGridConfig>
What to do next
ObjectQuery tutorial - step 4, expands the current step by including field and property access objects and additional relationships.
Parent topic
ObjectQuery tutorial