Package org.hibernate.auction

Source Code of org.hibernate.auction.Main

//$Id: Main.java 7369 2005-07-04 03:18:34Z oneovthafew $
package org.hibernate.auction;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;

import org.hibernate.FetchMode;
import org.hibernate.FlushMode;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;


/**
* Demonstrate some useful features of Hibernate.
*
* @author Gavin King
*/
public class Main {

  private SessionFactory factory;

  /**
   * Demonstrates HQL projection/aggregation
   */
  public void viewAllAuctionsFast() throws Exception {
    System.out.println("Viewing all auction item info");

    Session s = factory.openSession();
    Transaction tx=null;
    try {
      tx = s.beginTransaction();

      List auctions = s.createQuery(
        "select new AuctionInfo( item.id, item.description, item.ends, max(bid.amount) ) "
        + "from AuctionItem item "
        + "left join item.bids bid "
        + "group by item.id, item.description, item.ends "
        + "order by item.ends desc"
        )
        .setMaxResults(100)
        .list();

      Iterator iter = auctions.iterator();
      while ( iter.hasNext() ) {
        AuctionInfo ai = (AuctionInfo) iter.next();
        System.out.println(
          "Auction: " + ai.getId() + " - " + ai.getDescription() +
          ", ends: " + ai.getEnds() +
          ", highest bid: " + ai.getMaxAmount()
        );
      }
      System.out.println();

      tx.commit();
    }
    catch (Exception e) {
      if (tx!=null) tx.rollback();
      throw e;
    }
    finally {
      s.close();
    }
  }

  /**
   * Demonstrates HQL with runtime fetch strategy
   */
  public void viewAllAuctionsSlow() throws Exception {
    System.out.println("Viewing all auction item objects");

    Session s = factory.openSession();
    Transaction tx=null;
    try {
      s.setFlushMode(FlushMode.NEVER); //entirely optional!!
      tx = s.beginTransaction();

      List auctions = s.createQuery(
        "from AuctionItem item "
        + "left join fetch item.bids bid left join fetch bid.bidder "
        + "order by item.ends desc"
        )
        .setMaxResults(100)
        .list();

      Iterator iter = new HashSet(auctions).iterator();
      while ( iter.hasNext() ) {
        AuctionItem auction = (AuctionItem) iter.next();
        System.out.println(
          "Auction: " + auction.getId() + " - " + auction.getDescription() +
          ", ends: " + auction.getEnds() +
          ", bids: " + auction.getBids()
        );
      }
      System.out.println();

      tx.commit();
    }
    catch (Exception e) {
      if (tx!=null) tx.rollback();
      throw e;
    }
    finally {
      s.close();
    }
  }

  /**
   * Demonstrates transitive persistence with detached object support
   */
  public void bidOnAuction(User bidder, AuctionItem item, float amount) throws Exception {
    System.out.println("Creating a new bid for auction item: " + item.getId() + " by user: " + bidder.getId() );

    Session s = factory.openSession();
    Transaction tx=null;
    try {
      tx = s.beginTransaction();

      s.lock(item, LockMode.NONE);
      s.lock(bidder, LockMode.NONE);

      Bid bid = new Bid();
      bid.setBidder(bidder);
      bid.setDatetime( new Date() );
      bid.setAmount(amount);
      bid.setItem(item);
      bidder.getBids().add(bid);
      item.getBids().add(bid);

      tx.commit();
    }
    catch (Exception e) {
      if (tx!=null) tx.rollback();
      throw e;
    }
    finally {
      s.close();
    }
  }

  /**
   * Demonstrates detached object support
   */
  public void changeUserDetails(User user) throws Exception {
    System.out.println("Changing user details for: " + user.getId() );

    Session s = factory.openSession();
    Transaction tx=null;
    try {
      tx = s.beginTransaction();

      s.merge(user);

      tx.commit();
    }
    catch (Exception e) {
      if (tx!=null) tx.rollback();
      throw e;
    }
    finally {
      s.close();
    }
  }

  /**
   * Demonstrates automatic dirty checking
   */
  public void changeItemDescription(Long itemId, String description) throws Exception {
    System.out.println("Changing auction item description for: " + itemId );

    Session s = factory.openSession();
    Transaction tx=null;
    try {
      tx = s.beginTransaction();

      AuctionItem item = (AuctionItem) s.get(AuctionItem.class, itemId);
      if (item==null) throw new IllegalArgumentException("No item for the given id: " + itemId);
      item.setDescription(description);

      tx.commit();
    }
    catch (Exception e) {
      if (tx!=null) tx.rollback();
      throw e;
    }
    finally {
      s.close();
    }
  }

  /**
   * Demonstrates query by criteria with runtime fetch strategy
   */
  public void viewUserAuctions(Long sellerId) throws Exception {
    System.out.println("Viewing user and auctions: " + sellerId);

    Session s = factory.openSession();
    Transaction tx=null;
    try {
      tx = s.beginTransaction();

      List list = s.createCriteria(User.class)
        .add( Expression.eq("id", sellerId) )
        .setFetchMode("auctions", FetchMode.JOIN)
        .list();

      if (list.size()==0) throw new IllegalArgumentException("No user for the given id: " + sellerId);
      User user = (User) list.get(0);
      System.out.println(
        "User: " + user.getId() + " - " + user.getName() +
        ", email: " + user.getEmail() +
        ", auctions: " + user.getAuctions()
      );

      tx.commit();
    }
    catch (Exception e) {
      if (tx!=null) tx.rollback();
      throw e;
    }
    finally {
      s.close();
    }
  }

  /**
   * Demonstrates query by example
   */
  public void viewAuctionsByDescription(String description, int condition) throws Exception {
    String msg = "Viewing auctions containing: " + description;
    if (condition>0) msg += " with condition: " + condition + "/10";

    AuctionItem item = new AuctionItem();
    item.setDescription(description);
    item.setCondition(condition);

    Session s = factory.openSession();
    Transaction tx=null;
    try {
      tx = s.beginTransaction();

      Iterator iter = s.createCriteria(AuctionItem.class)
        .add( Example.create(item)
          .enableLike(MatchMode.ANYWHERE)
          .ignoreCase()
          .excludeZeroes()
        )
        .list()
        .iterator();

      System.out.println(msg);
      while ( iter.hasNext() ) {
        item = (AuctionItem) iter.next();
        System.out.println("Item: " + item.getId() + " - " + item.getDescription() );
      }
      System.out.println();

      tx.commit();
    }
    catch (Exception e) {
      if (tx!=null) tx.rollback();
      throw e;
    }
    finally {
      s.close();
    }
  }

  /**
   * Demonstrates transitive persistence
   */
  public void createTestAuctions() throws Exception {
    System.out.println("Setting up some test data");

    Session s = factory.openSession();
    Transaction tx = s.beginTransaction();

    User seller = new User();
    seller.setUserName("xam");
    seller.setName( new Name("Max", new Character('R'), "Andersen") );
    seller.setEmail("max@hibernate.org");
    seller.setPassword("******");
    seller.setAuctions( new ArrayList() );
    s.save(seller);
    User bidder1 = new User();
    bidder1.setUserName("1E1");
    bidder1.setName( new Name( "Gavin", new Character('A'), "King") );
    bidder1.setEmail("gavin@hibernate.org");
    bidder1.setPassword("******");
    bidder1.setBids( new ArrayList() );
    s.save(bidder1);
    User bidder2 = new User();
    bidder2.setUserName("steve");
    bidder2.setName( new Name("Steve", null, "Ebersole") );
    bidder2.setEmail("steve@hibernate.org");
    bidder2.setPassword("******");
    bidder2.setBids( new ArrayList() );
    s.save(bidder2);

    for ( int i=0; i<3; i++ ) {
      AuctionItem item = new AuctionItem();
      item.setShortDescription("Auction " + i);
      item.setDescription("the auction item number " + i);
      item.setEnds( new Date() );
      item.setBids( new ArrayList() );
      item.setSeller(seller);
      item.setCondition(i*3 + 2);
      for ( int j=0; j<i; j++ ) {

        Bid bid = new Bid();
        bid.setBidder(bidder1);
        bid.setAmount(j);
        bid.setDatetime( new Date() );
        bid.setItem(item);
        item.getBids().add(bid);
        bidder1.getBids().add(bid);

        Bid bid2 = new Bid();
        bid2.setBidder(bidder2);
        bid2.setAmount( j + 0.5f);
        bid2.setDatetime( new Date() );
        bid2.setItem(item);
        item.getBids().add(bid2);
        bidder2.getBids().add(bid2);
      }
      seller.getAuctions().add(item);
      mainItem = item;
    }
    mainBidder = bidder2;
    mainSeller = seller;

    BuyNow buyNow = new BuyNow();
    buyNow.setAmount(1.2f);
    buyNow.setDatetime( new Date() );
    buyNow.setBidder(mainBidder);
    buyNow.setItem(mainItem);
    mainBidder.getBids().add(buyNow);
    mainItem.getBids().add(buyNow);

    tx.commit();
    s.close();
  }

  static AuctionItem mainItem;
  static User mainBidder;
  static User mainSeller;

  public static void main(String[] args) throws Exception {

    final Main test = new Main();

    Configuration cfg = new Configuration()
      .addClass(AuctionItem.class)
      .addClass(Bid.class)
      .addClass(User.class)
      .setProperty(Environment.HBM2DDL_AUTO, "create");
    //cfg.setProperty("hibernate.show_sql", "true");

    test.factory = cfg.buildSessionFactory();

    test.createTestAuctions();
    test.viewAllAuctionsSlow();

    test.viewAllAuctionsFast();
    test.bidOnAuction(mainBidder, mainItem, 5.5f);
    test.viewAllAuctionsFast();

    test.viewUserAuctions( mainSeller.getId() );
    mainSeller.setEmail("max@jboss.org");
    test.changeUserDetails(mainSeller);
    test.changeItemDescription(mainItem.getId(), "new description");
    test.viewUserAuctions( mainSeller.getId() );

    test.viewAuctionsByDescription("It", 0);
    test.viewAuctionsByDescription("DESC", 3);
    test.viewAuctionsByDescription("DESC", 8);

    test.factory.close();

  }
}
TOP

Related Classes of org.hibernate.auction.Main

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.