@Override
    protected LineItem map(Tuple tuple) {
      LineItem lineItem = new LineItem();

      lineItem.setOrderId(tuple.get(qLineItem.orderid));
      lineItem.setLineNumber(tuple.get(qLineItem.linenum));
      lineItem.setItemId(tuple.get(qLineItem.itemid));
      lineItem.setQuantity(tuple.get(qLineItem.quantity));
      lineItem.setUnitPrice(tuple.get(qLineItem.unitprice).doubleValue());

      return lineItem;
    }
  public void insertOrder(final Order order) throws DataAccessException {
    order.setOrderId(springDataSequenceDao.getNextId("ordernum"));
    template.insert(
        qOrders,
        new SqlInsertCallback() {
          public long doInSqlInsertClause(SQLInsertClause sqlInsertClause) {
            return sqlInsertClause
                .columns(
                    qOrders.orderid,
                    qOrders.userid,
                    qOrders.orderdate,
                    qOrders.shipaddr1,
                    qOrders.shipaddr2,
                    qOrders.shipcity,
                    qOrders.shipstate,
                    qOrders.shipzip,
                    qOrders.shipcountry,
                    qOrders.billaddr1,
                    qOrders.billaddr2,
                    qOrders.billcity,
                    qOrders.billstate,
                    qOrders.billzip,
                    qOrders.billcountry,
                    qOrders.courier,
                    qOrders.totalprice,
                    qOrders.billtofirstname,
                    qOrders.billtolastname,
                    qOrders.shiptofirstname,
                    qOrders.shiptolastname,
                    qOrders.creditcard,
                    qOrders.exprdate,
                    qOrders.cardtype,
                    qOrders.locale)
                .values(
                    order.getOrderId(),
                    order.getUsername(),
                    order.getOrderDate(),
                    order.getShipAddress1(),
                    order.getShipAddress2(),
                    order.getShipCity(),
                    order.getShipState(),
                    order.getShipZip(),
                    order.getShipCountry(),
                    order.getBillAddress1(),
                    order.getBillAddress2(),
                    order.getBillCity(),
                    order.getBillState(),
                    order.getBillZip(),
                    order.getBillCountry(),
                    order.getCourier(),
                    order.getTotalPrice(),
                    order.getBillToFirstName(),
                    order.getBillToLastName(),
                    order.getShipToFirstName(),
                    order.getShipToLastName(),
                    order.getCreditCard(),
                    order.getExpiryDate(),
                    order.getCardType(),
                    order.getLocale())
                .execute();
          }
        });

    template.insert(
        qOrderStatus,
        new SqlInsertCallback() {
          public long doInSqlInsertClause(SQLInsertClause sqlInsertClause) {
            return sqlInsertClause
                .columns(
                    qOrderStatus.orderid,
                    qOrderStatus.linenum,
                    qOrderStatus.timestamp,
                    qOrderStatus.status)
                .values(
                    order.getOrderId(), order.getOrderId(), order.getOrderDate(), order.getStatus())
                .execute();
          }
        });

    for (int i = 0; i < order.getLineItems().size(); i++) {
      final LineItem lineItem = (LineItem) order.getLineItems().get(i);
      lineItem.setOrderId(order.getOrderId());

      template.insert(
          qLineItem,
          new SqlInsertCallback() {
            public long doInSqlInsertClause(SQLInsertClause sqlInsertClause) {
              return sqlInsertClause
                  .columns(
                      qLineItem.orderid,
                      qLineItem.linenum,
                      qLineItem.itemid,
                      qLineItem.quantity,
                      qLineItem.unitprice)
                  .values(
                      lineItem.getOrderId(),
                      lineItem.getLineNumber(),
                      lineItem.getItemId(),
                      lineItem.getQuantity(),
                      lineItem.getUnitPrice())
                  .execute();
            }
          });
    }
  }