Sie können einen Index verwenden, um Entitäten zu suchen, zu aktualisieren und zu entfernen.
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; }
Das folgende Beispiel
veranschaulicht, wie alle in der letzten Minute übergebenen Aufträge (Order) storniert werden.
Suchen Sie den Auftrag über einen Index, fügen Sie die Artikel aus dem Auftrag dem Bestand wieder hinzu, und entfernen
Sie den Auftrag und die zugeordneten Positionen aus dem System.
public static void cancelOrdersUsingIndex(Session s)
throws ObjectGridException {
// Alle Aufträge stornieren, die in der letzten Minute übergeben wurden
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();
// Auftrag suchen, damit er entfernt werden kann
Order curOrder = (Order) em.find(Order.class, orderKey);
// Sicherstellen, dass der Auftrag nicht von einer anderen Person geändert wurde
if(curOrder != null && curOrder.date.getTime() >= cancelTime.getTime()) {
for(OrderLine line : curOrder.lines) {
// Artikel wieder dem Bestand hinzufügen.
line.item.quantityOnHand += line.quantity;
line.quantity = 0;
}
em.remove(curOrder);
}
}
em.getTransaction().commit();}