Example: Create, Read, Update and Delete

Create, Read, Update and Delete operations can be performed using Hibernate and the persistent FootwearOrderLineitem class generated for migration of order entity data in the Footwear Orders sample MAPPER data report:

CRUDTest.java

@Test public void testFootwearOrders() throws Exception {
  // Open a stateless session and start transaction.
  StatelessSessionImpl session =
    (StatelessSessionImpl) this.sessionFactory.openStatelessSession();
  session.beginTransaction();

  // Query order line item setup via DBUnit and verify some attributes.
  Query query1 = session.createQuery("from FootwearOrderLineitem");
  List<FootwearOrderLineitem> orders = (List<FootwearOrderLineitem>) query1.list();
  assertEquals("correct # of FootwearOrderLineitem queried", 1, orders.size());

  FootwearOrderLineitem originalOrder = orders.get(0);
  assertNotNull("orderNumber of original FootwearOrderLineitem is not null",
    originalOrder.getOrderNumber());
  assertEquals("orderNumber of original FootwearOrderLineitem is correct",
    new Integer(32001), originalOrder.getOrderNumber());

  // Verify instance of persistent class that represents shadow table.
  assertNotNull("lineMetadata of original FootwearOrderLineitem is not null",
    originalOrder.getLineMetadata());
  assertEquals("cabinet of original FootwearOrderLineitem.lineMetadata is correct",
    3954, originalOrder.getLineMetadata().getCabinet());

  // Verify instance of persistent class for "inline" addressee of order line item.
  assertNotNull("addressee of original FootwearOrderLineitem is not null",
    originalOrder.getFootwearOrderAddressee());
  assertEquals("city/state of original FootwearOrderLineitem.addressee is correct",
    "Burr, MN", originalOrder.getFootwearOrderAddressee().getCityState());

  // Add an order line item.
  FootwearOrderLineitem newOrder = new FootwearOrderLineitem();
  newOrder.setOrderNumber(88503);
  newOrder.setQuantity(5);
  newOrder.setShoeType(ShoeType.RUNNING);
  newOrder.setShoeGender(ShoeGender.WOMENS);
  newOrder.setShoeSize("7");
  newOrder.setShoeColor("Red/White-Top/Black-Striped");
  newOrder.setPrice(new BigDecimal("85.99"));
  newOrder.setCost(new BigDecimal("20.44"));
  newOrder.setDateOrdered(new Date(2010 - 1900, 11, 7));
  newOrder.setTimeOrdered("10:06");
  newOrder.setCreateTimestamp(new Date());
  newOrder.setCreateUserId(3001L);
  newOrder.setLastUpdateTimestamp(newOrder.getCreateTimestamp());
  newOrder.setLastUpdateUserId(newOrder.getCreateUserId());
  session.insert(newOrder);

  // Create and associate instance of persistent class for shadow table.
  MJFootwearOrderLineitem newOrderMJ = new MJFootwearOrderLineitem(0, 100, 'E', 13, 200, 'T');
  newOrderMJ.setId(newOrder.getId());
  newOrder.setLineMetadata(newOrderMJ);
  session.insert(newOrderMJ);

  // Create and associate instance of persistent class for addressee of line item.
  FootwearOrderAddressee newAddressee = new FootwearOrderAddressee(0, "John Smith",
    "456 Elm St.",  "Arlington, VA", "22088", "jsmith@gmail.com", null);
  newAddressee.setId(newOrder.getId());
  newOrder.setFootwearOrderAddressee(newAddressee);
  session.insert(newAddressee);
  session.managedFlush();

  // Query order line item just added.
  Query query2 = session.createQuery("from FootwearOrderLineitem where id = " +
    newOrder.getId());
  FootwearOrderLineitem addedOrder = (FootwearOrderLineitem) query2.uniqueResult();
  assertNotNull("newly added FootwearOrderLineitem successfully queried", newOrder);

  // Delete order line item setup by DbUnit.
  session.delete(originalOrder.getLineMetadata());
  session.delete(originalOrder);
  session.managedFlush();

  Query query3 = session.createQuery("from FootwearOrderLineitem where id = " +
     originalOrder.getId());
  List<FootwearOrderLineitem> noOrders = (List<FootwearOrderLineitem>) query3.list();
    assertEquals("correct # of FootwearOrderLineitem queried after delete", 0, noOrders.size());

  Query query4 = session.createQuery("from MJFootwearOrderLineitem where id = " +
    originalOrder.getId());
  List<MJFootwearOrderLineitem> noLineMetadata = (List<MJFootwearOrderLineitem>) query4.list();
  assertEquals("correct # of FootwearOrderLineitem queried after delete", 0, noLineMetadata.size());

  // Update order line item we added.
  addedOrder.setCost(new BigDecimal("10.99"));
  addedOrder.setQuantity(100);
  addedOrder.setShoeColor("Blue/White-Checked");
  addedOrder.setShoeGender(ShoeGender.MENS);
  session.update(addedOrder);
  session.managedFlush();

  // Query order line item just updated and verify some attributes.
  Query query5 = session.createQuery("from FootwearOrderLineitem where id = " +
    addedOrder.getId());
  FootwearOrderLineitem updatedOrder = (FootwearOrderLineitem) query5.uniqueResult();
  assertNotNull("updated FootwearOrderLineitem successfully queried", newOrder);

  assertNotNull("orderNumber of updated FootwearOrderLineitem is not null",
    updatedOrder.getOrderNumber());
  assertEquals("orderNumber of updated FootwearOrderLineitem is unchanged",
    addedOrder.getOrderNumber(), updatedOrder.getOrderNumber());
  assertEquals("qty of updated FootwearOrderLineitem is changed",
    addedOrder.getQuantity(), updatedOrder.getQuantity());
  assertEquals("shoeColor of updated FootwearOrderLineitem is changed",
    addedOrder.getShoeColor(), updatedOrder.getShoeColor());

  // Commit transaction, which is configured to close session.
  session.getTransaction().commit();
}