Sie können Entitäten über eine Abfrage aktualisieren und 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; }
Die Entitätsklasse "Order" ist dieselbe wie im vorherigen Beispiel.
Die Klasse stellt die Annotation "@Index" weiterhin bereit, weil die Abfragezeichenfolge
das Datum verwendet, um die Entität zu finden.
Die Abfragesteuerkomponente verwendet Indizes, wenn sie verwendet werden können.
public static void cancelOrdersUsingQuery(Session s) {
// 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();
// Abfrage erstellen, die den Auftrag nach Datum sucht. Da
// ein Index für das Auftragsdatum definiert ist, wird er
// von der Abfrage automatisch verwendet.
Query query = em.createQuery("SELECT order FROM Order order
WHERE order.date >= ?1");
query.setParameter(1, cancelTime);
Iterator<Order> orderIterator = query.getResultIterator();
while(orderIterator.hasNext()) {
Order order = orderIterator.next();
// Sicherstellen, dass der Auftrag nicht von einer anderen Person geändert wurde
// Da die Abfrage einen Index verwendet, ist keine Sperre für die Zeile gesetzt.
if(order != null && order.date.getTime() >= cancelTime.getTime()) {
for(OrderLine line : order.lines) {
// Artikel wieder dem Bestand hinzufügen.
line.item.quantityOnHand += line.quantity;
line.quantity = 0;
}
em.remove(order);
}
}
em.getTransaction().commit();}
Wie im vorherigen Beispiel
beabsichtigt die Methode "cancelOrdersUsingQuery", alle Aufträge zu stornieren, die in der
letzten Minute übergeben wurden.
Zum Stornieren des Auftrags, suchen Sie den Auftrag über eine Abfrage, fügen Sie die Artikel aus dem Auftrag dem Bestand wieder hinzu, und entfernen
Sie den Auftrag und die zugeordneten Positionen aus dem System.