//$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(); // // } }