Lernprogramm zu ObjectQuery - Schritt 3

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.

Vorbereitende Schritte

Stellen Sie sicher, dass Sie die Anweisungen im Abschnitt Lernprogramm zu ObjectQuery - Schritt 2 ausgeführt haben, bevor Sie mit diesem Schritt fortfahren.

Informationen zu diesem Vorgang

In diesem Beispiel werden zwei Maps verwendet, denen jeweils ein einzelner Java-Typ zugeordnet ist. Die Map "Order" enthält OrderBean-Objekte, und die Map "Customer" enthält CustomerBean-Objekte.

Vorgehensweise

Definieren Sie Maps mit einer Beziehung.
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>

Nächste Schritte

Im Abschnitt Lernprogramm zu ObjectQuery - Schritt 4 wird der aktuelle Schritt erweitert, indem Objekt mit Feld- und Eigenschaftszugriff und weitere Beziehungen hinzugefügt werden.