Guía de aprendizaje del gestor de entidades: actualización y eliminación de entradas con un índice

Puede utilizar un índice para buscar, actualizar y eliminar entidades.

Procedimiento

Actualice y elimine entidades utilizando un índice. Utilice un índice para buscar, actualizar y eliminar entidades. En los siguientes ejemplos, la clase de entidad Order se actualiza para utilizar la anotación @Index. La anotación @Index señala WebSphere eXtreme Scale para crear un índice de rango para un atributo. El nombre del índice es el mismo nombre que el nombre del atributo y siempre es un tipo de índice MapRangeIndex.
Order.java
@Entity
public class Order
{
    @Id String orderNumber;
    @Index java.util.Date date;
    @OneToOne(cascade=CascadeType.PERSIST) Customer customer;
    @OneToMany(cascade=CascadeType.ALL, mappedBy="order") 
				@OrderBy("lineNumber") List<OrderLine> lines;  } 
En el siguiente ejemplo se muestra cómo cancelar todos los pedidos que se someten en el último minuto. Busque el pedido utilizando un índice, vuelva a añadir los artículos del pedido al inventario y elimine del sistema el pedido y los elementos de línea asociados.
public static void cancelOrdersUsingIndex(Session s) 
		throws ObjectGridException {
    // Cancelar todos los pedidos que se sometieron hace un minuto
    java.util.Date cancelTime = new 
			java.util.Date(System.currentTimeMillis() - 60000);
    EntityManager em = s.getEntityManager();
    em.getTransaction().begin();
    MapRangeIndex dateIndex = (MapRangeIndex) 
			s.getMap("Order").getIndex("date");
    Iterator<Tuple> orderKeys = dateIndex.findGreaterEqual(cancelTime);     
		while(orderKeys.hasNext()) {         
			Tuple orderKey = orderKeys.next();         
			// Buscar el pedido para eliminarlo.         
			Order curOrder = (Order) em.find(Order.class, orderKey);         
			// Verificar que el pedido no haya sido actualizado por otro usuario.         
			if(curOrder != null && curOrder.date.getTime() >= cancelTime.getTime()) {             
				for(OrderLine line : curOrder.lines) {                 
					// Vuelva a añadir el elemento al inventario.                 
					line.item.quantityOnHand += line.quantity;                 
					line.quantity = 0;             
				}             
			em.remove(curOrder);         
			}     
		}     
	em.getTransaction().commit(); 
}