Lernprogramm zum EntityManager: Einträge über einen Index aktualisieren und entfernen

Sie können einen Index verwenden, um Entitäten zu suchen, zu aktualisieren und zu entfernen.

Vorgehensweise

Aktualisieren und entfernen Sie Entitäten über einen Index. Verwenden Sie einen Index, um Entitäten zu suchen, zu aktualisieren und zu entfernen. In den folgenden Beispielen wird die Entitätsklasse "Order" für die Verwendung der Annotation "@Index" aktualisiert. Die Annotation "@Index" signalisiert WebSphere eXtreme Scale, einen Bereichsindex für ein Attribut zu erstellen. Der Name des Index entspricht dem Namen des Attributs und hat immer den Indextyp "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;  } 
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();}