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