Création d'une relation simple entre des entités en créant deux classes entité avec une relation, en enregistrant les entités avec l'ObjectGrid et en stockant les instances d'entités dans le cache.
Customer.java
@Entity
public class Customer
{
@Id String id;
String firstName;
String surname;
String address;
String phoneNumber;
}
Cette classe comprend des informations sur le client, telles que le nom, l'adresse et le numéro de téléphone.Order.java
@Entity
public class Order {
@Id String orderNumber;
Date date;
@ManyToOne(cascade=CascadeType.PERSIST) Customer customer;
String itemName;
int quantity;
double price;
}
Dans cet exemple, une référence à l'objet Customer remplace l'attribut customerName. La référence possède une annotation qui indique une relation plusieurs à un. Ce type de relation indique que chaque commande a un client, mais que plusieurs commandes peuvent référencer le même client. Le modificateur d'annotations en cascade
indique que si EntityManager conserve l'objet Order, il doit également conserver l'objet Customer. Si vous décidez de ne pas définir l'option de conservation de la cascade (option par défaut), vous devez conserver manuellement l'objet Customer avec l'objet Order.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();
// Fermer la session (facultatif dans les versions 7.1.1 et ultérieures) pour améliorer les performances
s.close();
}
}
Cette application est similaire à l'exemple d'application de l'étape précédente.
Dans l'exemple précédent, seule une classe Order a été enregistrée. WebSphere eXtreme Scale détecte et inclut automatiquement la référence dans l'entité Customer et une instance Customer pour John Smith est créée et référencée depuis le nouvel objet Order. Par conséquent, le nouveau client est automatiquement conservé, car la relation entre deux commandes inclut le modificateur de cascade, qui requiert la conservation de chaque objet. Lorsque l'objet Order est détecté, le gestionnaire d'entités recherche l'objet Customer associé et insère une référence dans l'objet.