Tutorial do Entity Manager: Formando Relacionamentos de Entidades

Crie um relacionamento simples entre entidades criando duas classes de entidades com um relacionamento, registrando as entidades com o ObjectGrid e armazenamento as instâncias da entidade no cache.

Procedimento

  1. Crie a entidade customer, que é usada para armazenar detalhes do cliente independentemente do objeto Order. Um exemplo da entidade customer é apresentado a seguir:
    Customer.java
    @Entity
    public class Customer
    {
        @Id String id;
        String firstName;
        String surname;
        String address;
        String phoneNumber;
    }
    Esta classe inclui informações sobre o cliente, tais como nome, endereço e número de telefone.
  2. Crie o objeto Order, que é semelhante ao objeto Order no tópico do Tutorial do Entity Manager: Criando uma Classe de Entidade. A seguir, está um exemplo do objeto order:
    Order.java
    
    @Entity
    public class Order {
        @Id String orderNumber;
        Date date;
        @ManyToOne(cascade=CascadeType.PERSIST) Customer customer;
        String itemName;
        int quantity;
        double price;
    }
    Neste exemplo, uma referência para um objeto Customer substitui o atributo customerName. A referência possui uma anotação que indica uma relação muitos-para-um. Um relacionamento muitos-para-um indica que cada pedido possui um cliente, mas vários pedidos podem fazer referência ao mesmo cliente. O modificador de anotação em cascata indica que, se o gerenciador de entidade persistir o objeto Order, ele também deverá persistir o objeto Customer. Se você decidir não definir a opção de persistência em cascata, que é a opção padrão, deve persistir manualmente o objeto Customer com o objeto Order.
  3. Utilizando as entidades, defina os mapas para a instância do ObjectGrid. Cada mapa é definido para uma entidade específica e uma entidade é denominada Order e a outra é denominada Customer. O aplicativo de exemplo a seguir ilustra como armazenar e recuperar um pedido do cliente:
    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(); } }
    Este aplicativo é semelhante ao aplicativo de exemplo que está na etapa anterior. No exemplo anterior, apenas uma única classe Order é registrada. O WebSphere eXtreme Scale detecta e automaticamente inclui a referência na entidade Customer e uma instância Customer para John Smith é criada e referenciada a partir do novo objeto Order. Como resultado, o novo cliente é persistido automaticamente, porque o relacionamento entre duas ordens inclui o modificador em cascata, que requer que cada objeto seja persistido. Quando o objeto Order é localizado, o entity manager automaticamente localiza o objeto Customer associado e insere uma referência no objeto.