索引を使用して、エンティティーを検索、更新、および除去することができます。
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; }
以下の例では、直前にサブミットされたすべてのオーダーを取り消す方法を示しています。索引を
使用してオーダーを検索し、オーダーの品目を在庫に戻し、オーダーおよびそれに関連する明細行をシステムから削除します。public static void cancelOrdersUsingIndex(Session s)
throws ObjectGridException {
// Cancel all orders that were submitted 1 minute ago
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();
// Find the Order so we can remove it.
Order curOrder = (Order) em.find(Order.class, orderKey);
// Verify that the order was not updated by someone else.
if(curOrder != null && curOrder.date.getTime() >= cancelTime.getTime()) {
for(OrderLine line : curOrder.lines) {
// Add the item back to the inventory.
line.item.quantityOnHand += line.quantity;
line.quantity = 0;
}
em.remove(curOrder);
}
}
em.getTransaction().commit();
}