Vous pouvez utiliser un index pour rechercher, mettre à jour et supprimer des entités.
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; }
L'exemple suivant montre l'annulation de toutes les commandes soumises au cours de la dernière minute. Recherchez la commande à l'aide d'un index, replacez les articles de la commande en stock et supprimez la commande ainsi que les articles de la ligne associée du système.
public static void cancelOrdersUsingIndex(Session s)
throws ObjectGridException {
// Annulez toutes les commandes soumises il y a une minute.
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();
// Recherchez la commande à supprimer.
Order curOrder = (Order) em.find(Order.class, orderKey);
// Vérifiez que la commande n'a pas été mise à jour par une autre personne.
if(curOrder != null && curOrder.date.getTime() >= cancelTime.getTime()) {
for(OrderLine line : curOrder.lines) {
// Replacez l'article en stock.
line.item.quantityOnHand += line.quantity;
line.quantity = 0;
}
em.remove(curOrder);
}
}
em.getTransaction().commit();
}