リレーションシップを持つ 2 つのエンティティー・クラスを作成し、それらのエンティティーを ObjectGrid に登録し、エンティティー・インスタンスをキャッシュに格納することで、エンティティー間の簡単なリレーションシップを作成します。
Customer.java
@Entity
public class Customer
{
@Id String id;
String firstName;
String surname;
String address;
String phoneNumber;
}
このクラスには、名前、住所、電話番号といった、カスタマーに関する情報が含まれます。Order.java
@Entity
public class Order
{
@Id String orderNumber;
Date date;
@ManyToOne(cascade=CascadeType.PERSIST) Customer customer;
String itemName;
int quantity;
double price;
}
この例では、Customer オブジェクトへの参照が customerName 属性に取って代わります。
この参照には多対 1 リレーションシップを示すアノテーションが付いています。
多対 1 リレーションシップは各オーダーに 1 人のカスタマーがあることを示しますが、複数のオーダーが同じカスタマーを参照することもあります。
カスケード・アノテーション修飾子は、エンティティー・マネージャーで Order オブジェクトを永続化させる場合に、Customer オブジェクトも永続化させる必要があることを示しています。カスケード永続化オプション (デフォルトのオプション) を設定しない場合は、Order オブジェクトとともに Customer オブジェクトを手動で永続化する必要があります。Application.java
public class Application
{
static public void main(String [] args)
throws Exception
{
ObjectGrid og =
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid();
og.registerEntities(new Class[] {Order.class});
Session s = og.getSession();
EntityManager em = s.getEntityManager();
em.getTransaction().begin();
Customer cust = new Customer();
cust.address = "Main Street";
cust.firstName = "John";
cust.surname = "Smith";
cust.id = "C001";
cust.phoneNumber = "5555551212";
Order o = new Order();
o.customer = cust;
o.date = new java.util.Date();
o.itemName = "Widget";
o.orderNumber = "1";
o.price = 99.99;
o.quantity = 1;
em.persist(o);
em.getTransaction().commit();
em.getTransaction().begin();
o = (Order)em.find(Order.class, "1");
System.out.println("Found order for customer: "
+ o.customer.firstName + " " + o.customer.surname);
em.getTransaction().commit();
// Close the session (optional in Version 7.1.1 and later) for improved performance
s.close();
}
}
このアプリケーションは、直前のステップにあるアプリケーション例と類似しています。
前の例では、単一のクラス Order のみが登録されました。
WebSphere® eXtreme
Scale では、Customer エンティティーへの参照を
検出して自動的に組み込むため、John Smith の Customer インスタンスが作成されると、
新しい Order オブジェクトから参照されます。この結果として、
新しいカスタマーは自動的に永続化されます。これは、2 つのオーダーの関係には、
各オブジェクトの永続化を必要とするカスケード修飾子が組み込まれているためです。Order オブジェクトが見つかると、エンティティー・マネージャーでは、関連の Customer オブジェクトを自動的に検出し、このオブジェクトへの参照を挿入します。