@Test public void acceptBid() throws Exception { Stock myStock = new Stock("ABC", "AB Corp"); Bid b1 = exchange.buy(traderA, myStock, 12); Bid b2 = exchange.sell(traderB, myStock, 10); assertThat(b1.getId(), is(1L)); assertThat(b2.getId(), is(2L)); assertThat(exchange.getTransactions().size(), is(1)); assertThat(exchange.getTransactions().poll(), is(new Transaction(b1, b2, 12))); }
@Test public void unacceptableBids() throws Exception { Stock myStock = new Stock("ABC", "AB Corp"); Bid b1 = exchange.buy(traderA, myStock, 10); Bid s1 = exchange.sell(traderB, myStock, 12); assertThat(s1.getId(), not(b1.getId())); assertThat(exchange.getTransactions().size(), is(0)); Bid s2 = exchange.sell(traderB, myStock, 9); Bid s3 = exchange.sell(traderB, myStock, 15); assertThat(exchange.getTransactions().size(), is(1)); assertThat(exchange.getTransactions().peek(), is(new Transaction(b1, s2, 10))); assertThat( exchange.getTransactions().peek().toString(), is( "Transaction{buy=Bid{id=1, trader=Trader{name='Al'}, stock=Stock{name='AB Corp', ticker='ABC'}, price=10.0}, sell=Bid{id=3, trader=Trader{name='Ben'}, stock=Stock{name='AB Corp', ticker='ABC'}, price=9.0}, price=10.0}")); }
@Test @SuppressWarnings({"unchecked"}) @SkipForDialect( value = {PostgreSQL81Dialect.class}, comment = "doesn't like boolean=1") public void testLazy() { Session s = openSession(); Transaction t = s.beginTransaction(); Auction a = new Auction(); a.setDescription("an auction for something"); a.setEnd(new Date()); Bid b = new Bid(); b.setAmount(new BigDecimal(123.34).setScale(19, BigDecimal.ROUND_DOWN)); b.setSuccessful(true); b.setDatetime(new Date()); b.setItem(a); a.getBids().add(b); a.setSuccessfulBid(b); s.persist(b); t.commit(); s.close(); Long aid = a.getId(); Long bid = b.getId(); s = openSession(); t = s.beginTransaction(); b = (Bid) s.load(Bid.class, bid); assertFalse(Hibernate.isInitialized(b)); a = (Auction) s.get(Auction.class, aid); assertFalse(Hibernate.isInitialized(a.getBids())); assertTrue(Hibernate.isInitialized(a.getSuccessfulBid())); assertSame(a.getBids().iterator().next(), b); assertSame(b, a.getSuccessfulBid()); assertTrue(Hibernate.isInitialized(b)); assertTrue(b.isSuccessful()); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); b = (Bid) s.load(Bid.class, bid); assertFalse(Hibernate.isInitialized(b)); a = (Auction) s.createQuery("from Auction a left join fetch a.bids").uniqueResult(); assertTrue(Hibernate.isInitialized(b)); assertTrue(Hibernate.isInitialized(a.getBids())); assertSame(b, a.getSuccessfulBid()); assertSame(a.getBids().iterator().next(), b); assertTrue(b.isSuccessful()); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); b = (Bid) s.load(Bid.class, bid); a = (Auction) s.load(Auction.class, aid); assertFalse(Hibernate.isInitialized(b)); assertFalse(Hibernate.isInitialized(a)); s.createQuery("from Auction a left join fetch a.successfulBid").list(); assertTrue(Hibernate.isInitialized(b)); assertTrue(Hibernate.isInitialized(a)); assertSame(b, a.getSuccessfulBid()); assertFalse(Hibernate.isInitialized(a.getBids())); assertSame(a.getBids().iterator().next(), b); assertTrue(b.isSuccessful()); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); b = (Bid) s.load(Bid.class, bid); a = (Auction) s.load(Auction.class, aid); assertFalse(Hibernate.isInitialized(b)); assertFalse(Hibernate.isInitialized(a)); assertSame(s.get(Bid.class, bid), b); assertTrue(Hibernate.isInitialized(b)); assertSame(s.get(Auction.class, aid), a); assertTrue(Hibernate.isInitialized(a)); assertSame(b, a.getSuccessfulBid()); assertFalse(Hibernate.isInitialized(a.getBids())); assertSame(a.getBids().iterator().next(), b); assertTrue(b.isSuccessful()); t.commit(); s.close(); }
public void testJoinFetch() { Session s = openSession(); Transaction t = s.beginTransaction(); s.createQuery("delete from Bid").executeUpdate(); s.createQuery("delete from Comment").executeUpdate(); s.createQuery("delete from Item").executeUpdate(); t.commit(); s.close(); Category cat = new Category("Photography"); Item i = new Item(cat, "Camera"); Bid b = new Bid(i, 100.0f); new Bid(i, 105.0f); new Comment(i, "This looks like a really good deal"); new Comment(i, "Is it the latest version?"); new Comment(i, "<comment deleted>"); System.out.println(b.getTimestamp()); s = openSession(); t = s.beginTransaction(); s.persist(cat); s.persist(i); t.commit(); s.close(); getSessions().evict(Item.class); s = openSession(); t = s.beginTransaction(); i = (Item) s.get(Item.class, i.getId()); assertTrue(Hibernate.isInitialized(i.getBids())); assertEquals(i.getBids().size(), 2); assertTrue(Hibernate.isInitialized(i.getComments())); assertEquals(i.getComments().size(), 3); t.commit(); s.close(); getSessions().evict(Bid.class); s = openSession(); t = s.beginTransaction(); b = (Bid) s.get(Bid.class, b.getId()); assertTrue(Hibernate.isInitialized(b.getItem())); assertTrue(Hibernate.isInitialized(b.getItem().getComments())); assertEquals(b.getItem().getComments().size(), 3); System.out.println(b.getTimestamp()); t.commit(); s.close(); getSessions().evictCollection(Item.class.getName() + ".bids"); s = openSession(); t = s.beginTransaction(); i = (Item) s.createCriteria(Item.class) .setFetchMode("bids", FetchMode.SELECT) .setFetchMode("comments", FetchMode.SELECT) .uniqueResult(); assertFalse(Hibernate.isInitialized(i.getBids())); assertFalse(Hibernate.isInitialized(i.getComments())); b = (Bid) i.getBids().iterator().next(); assertTrue(Hibernate.isInitialized(b.getItem())); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); i = (Item) s.createQuery("from Item i left join fetch i.bids left join fetch i.comments") .uniqueResult(); assertTrue(Hibernate.isInitialized(i.getBids())); assertTrue(Hibernate.isInitialized(i.getComments())); assertEquals(i.getComments().size(), 3); assertEquals(i.getBids().size(), 2); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); Object[] row = (Object[]) s.getNamedQuery(Item.class.getName() + ".all").list().get(0); i = (Item) row[0]; assertTrue(Hibernate.isInitialized(i.getBids())); assertTrue(Hibernate.isInitialized(i.getComments())); assertEquals(i.getComments().size(), 3); assertEquals(i.getBids().size(), 2); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); i = (Item) s.createCriteria(Item.class).uniqueResult(); assertTrue(Hibernate.isInitialized(i.getBids())); assertTrue(Hibernate.isInitialized(i.getComments())); assertEquals(i.getComments().size(), 3); assertEquals(i.getBids().size(), 2); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); List bids = s.createQuery("from Bid b left join fetch b.item i left join fetch i.category").list(); Bid bid = (Bid) bids.get(0); assertTrue(Hibernate.isInitialized(bid.getItem())); assertTrue(Hibernate.isInitialized(bid.getItem().getCategory())); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); List pairs = s.createQuery("from Item i left join i.bids b left join fetch i.category").list(); Item item = (Item) ((Object[]) pairs.get(0))[0]; assertFalse(Hibernate.isInitialized(item.getBids())); assertTrue(Hibernate.isInitialized(item.getCategory())); s.clear(); pairs = s.createQuery("from Item i left join i.bids b left join i.category").list(); item = (Item) ((Object[]) pairs.get(0))[0]; assertFalse(Hibernate.isInitialized(item.getBids())); assertTrue(Hibernate.isInitialized(item.getCategory())); s.clear(); pairs = s.createQuery("from Bid b left join b.item i left join fetch i.category").list(); bid = (Bid) ((Object[]) pairs.get(0))[0]; assertTrue(Hibernate.isInitialized(bid.getItem())); assertTrue(Hibernate.isInitialized(bid.getItem().getCategory())); s.clear(); pairs = s.createQuery("from Bid b left join b.item i left join i.category").list(); bid = (Bid) ((Object[]) pairs.get(0))[0]; assertTrue(Hibernate.isInitialized(bid.getItem())); assertTrue(Hibernate.isInitialized(bid.getItem().getCategory())); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); s.createQuery("delete from Bid").executeUpdate(); s.createQuery("delete from Comment").executeUpdate(); s.createQuery("delete from Item").executeUpdate(); s.createQuery("delete from Category").executeUpdate(); t.commit(); s.close(); }