@Test public void testOnlySubclassIsCached() { final StatisticsImplementor statistics = sessionFactory().getStatistics(); inTransaction( s -> { s.persist( new Employee( "1", "John Doe", "987", "engineering") ); s.persist( new Customer( "2", "Acme Corp", "123" ) ); } ); assertTrue( sessionFactory().getCache().contains( Employee.class, "1" ) ); assertTrue( sessionFactory().getCache().contains( Person.class, "1" ) ); assertFalse( sessionFactory().getCache().contains( Customer.class, "2" ) ); assertFalse( sessionFactory().getCache().contains( Person.class, "2" ) ); inTransaction( s -> { statistics.clear(); final Customer customer = s.get( Customer.class, "2" ); assertTrue( Hibernate.isInitialized( customer ) ); assertThat( statistics.getSecondLevelCacheHitCount(), CoreMatchers.is(0L) ); statistics.clear(); final Employee emp = s.get( Employee.class, "1" ); assertTrue( Hibernate.isInitialized( emp ) ); assertThat( statistics.getSecondLevelCacheHitCount(), CoreMatchers.is(1L) ); } ); }
@Test public void testOnlySubclassIsCached() { final StatisticsImplementor statistics = sessionFactory().getStatistics(); inTransaction( s -> s.persist( new Customer( 1, "Acme Corp", "123" ) ) ); assertTrue( sessionFactory().getCache().contains( Customer.class, 1 ) ); inTransaction( s -> { statistics.clear(); final Customer customer = s.get( Customer.class, 1 ); assertTrue( Hibernate.isInitialized( customer ) ); assertThat( statistics.getSecondLevelCacheHitCount(), CoreMatchers.is(1L) ); } ); }
@Test public void testStrictUnversioned() { sessionFactory = buildSessionFactory( Person.class, true ); final StatisticsImplementor statistics = sessionFactory.getStatistics(); inTransaction( sessionFactory, s -> s.persist( new Person( "1", "John Doe", true ) ) ); // this time it should be iun the cache because we enabled JPA compliance assertEquals( statistics.getSecondLevelCachePutCount(), 1 ); assertTrue( sessionFactory.getCache().contains( Person.class, "1" ) ); inTransaction( sessionFactory, s -> { statistics.clear(); final Person person = s.get( Person.class, "1" ); assertTrue( Hibernate.isInitialized( person ) ); assertThat( statistics.getSecondLevelCacheHitCount(), CoreMatchers.is( 1L) ); statistics.clear(); } ); }
@Test public void testUnstrictUnversioned() { sessionFactory = buildSessionFactory( Person.class, false ); final StatisticsImplementor statistics = sessionFactory.getStatistics(); inTransaction( sessionFactory, s -> s.persist( new Person( "1", "John Doe", true ) ) ); // it should not be in the cache because it should be invalidated instead assertEquals( statistics.getSecondLevelCachePutCount(), 0 ); assertFalse( sessionFactory.getCache().contains( Person.class, "1" ) ); inTransaction( sessionFactory, s -> { statistics.clear(); final Person person = s.get( Person.class, "1" ); assertTrue( Hibernate.isInitialized( person ) ); assertThat( statistics.getSecondLevelCacheHitCount(), CoreMatchers.is( 0L) ); statistics.clear(); } ); }
@Test public void testVersioned() { sessionFactory = buildSessionFactory( VersionedPerson.class, false ); final StatisticsImplementor statistics = sessionFactory.getStatistics(); inTransaction( sessionFactory, s -> s.persist( new VersionedPerson( "1", "John Doe", true ) ) ); // versioned data should be cacheable regardless assertEquals( statistics.getSecondLevelCachePutCount(), 1 ); assertTrue( sessionFactory.getCache().contains( VersionedPerson.class, "1" ) ); inTransaction( sessionFactory, s -> { statistics.clear(); final VersionedPerson person = s.get( VersionedPerson.class, "1" ); assertTrue( Hibernate.isInitialized( person ) ); assertThat( statistics.getSecondLevelCacheHitCount(), CoreMatchers.is( 1L ) ); statistics.clear(); } ); }