以下のステップにより、2 つのマップを持つ ObjectGrid、およびリレーションシップを備えたマップのスキーマを作成し、 オブジェクトをキャッシュに挿入し、後でシンプルな照会を使用してオブジェクトを検索することができます。
OrderBean.java
public class OrderBean implements Serializable {
String orderNumber;
java.util.Date date;
String customerId;
String itemName;
int quantity;
double price;
}
OrderBean には customerName はありません。代わりに customerId があり、これは CustomerBean オブジェクトと Customer マップの主キーです。CustomerBean.java
public class CustomerBean implements Serializable{
private static final long serialVersionUID = 1L;
String id;
String firstName;
String surname;
String address;
String phoneNumber;
}
この 2 つの型あるいは 2 つのマップの間の関係は次のとおりです。
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();
// Close the session (optional in Version 7.1.1 and later) for improved performance
s.close();
}
}
ObjectGrid デプロイメント記述子の対応する XML は、以下のようになります。
<?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>