Mit dem folgenden Schritt erstellen Sie ein ObjectGrid mit zwei Maps und ein Schema für die Maps mit einer Beziehung, fügen Objekte in den Cache ein und rufen diese später über eine einfache Abfrage ab.
OrderBean.java
public class OrderBean implements Serializable {
String orderNumber;
java.util.Date date;
String customerId;
String itemName;
int quantity;
double price;
}
Die OrderBean enthält keinen customerName mehr.
Stattdessen enthält sie die customerId, die der Primärschlüssel
für das CustomerBean-Objekt und die Map "Customer" ist.
CustomerBean.java
public class CustomerBean implements Serializable{
private static final long serialVersionUID = 1L;
String id;
String firstName;
String surname;
String address;
String phoneNumber;
}
Im Folgenden sehen Sie die Beziehung zwischen den beiden Typen bzw. Maps:
Application.java
public class Application
{
static public void main(String [] args)
throws Exception
{
ObjectGrid og = ObjectGridManagerFactory.getObjectGridManager().createObjectGrid();
og.defineMap("Order");
og.defineMap("Customer");
// Schema definieren
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(); // Close the session (optional in Version 7.1.1 and later) for improved performance
s.close();
}
}
Im Folgenden sehen Sie die funktional entsprechende XML im ObjectGrid-Implementierungsdeskriptor:
<?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>