@Test public void testStaleCacheWithAsyncIndexer() { Session session = openSession(); final Statistics statistics = session.getSessionFactory().getStatistics(); statistics.clear(); statistics.setStatisticsEnabled( true ); setData( session, statistics ); GatedLuceneBackend.open.set( false ); // disable processing of index updates Transaction tx = session.beginTransaction(); List list = session.createCriteria( StrictKernel.class ).list(); assertThat( list ).hasSize( 2 ); session.delete( list.get( 0 ) ); tx.commit(); session.clear(); GatedLuceneBackend.open.set( true ); FullTextSession fullTextSession = Search.getFullTextSession( session ); FullTextQuery allKernelsQuery = fullTextSession.createFullTextQuery( new MatchAllDocsQuery() ) .initializeObjectsWith( ObjectLookupMethod.SECOND_LEVEL_CACHE, DatabaseRetrievalMethod.QUERY ); //Identify the mismatch between index/database: assertThat( allKernelsQuery.getResultSize() ).isEqualTo( 2 ); assertThat( allKernelsQuery.list() ).hasSize( 1 ); }
@Test public void testStaleCacheWithAsyncIndexer() { Session session = openSession(); final Statistics statistics = session.getSessionFactory().getStatistics(); statistics.clear(); statistics.setStatisticsEnabled( true ); setData( session, statistics ); GatedLuceneBackend.open.set( false ); // disable processing of index updates Transaction tx = session.beginTransaction(); List list = session.createCriteria( Kernel.class ).list(); assertThat( list ).hasSize( 2 ); session.delete( list.get( 0 ) ); tx.commit(); session.clear(); GatedLuceneBackend.open.set( true ); FullTextSession fullTextSession = Search.getFullTextSession( session ); FullTextQuery allKernelsQuery = fullTextSession.createFullTextQuery( new MatchAllDocsQuery() ) .initializeObjectsWith( ObjectLookupMethod.SECOND_LEVEL_CACHE, DatabaseRetrievalMethod.QUERY ); assertThat( allKernelsQuery.getResultSize() ).isEqualTo( 2 ); assertThat( allKernelsQuery.list() ).hasSize( 1 ); assertThat( statistics.getSecondLevelCacheHitCount() ).isEqualTo( 1 ); }
@Test public void testQueryWith2LCLookup() throws Exception { Session session = openSession(); final Statistics statistics = session.getSessionFactory().getStatistics(); statistics.clear(); statistics.setStatisticsEnabled( true ); setData( session, statistics ); session.clear(); Transaction transaction = session.beginTransaction(); final FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = fullTextSession.getSearchFactory() .buildQueryBuilder() .forEntity( Kernel.class ) .get(); final Query luceneQuery = queryBuilder.keyword().onField( "product" ).matching( "Polgeiser" ).createQuery(); final FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery, Kernel.class ); fullTextQuery.initializeObjectsWith( ObjectLookupMethod.SECOND_LEVEL_CACHE, DatabaseRetrievalMethod.QUERY ); List list = fullTextQuery.list(); assertThat( list.size() ).isEqualTo( 2 ); assertThat( statistics.getSecondLevelCacheHitCount() ) .isEqualTo( 2 ); assertThat( statistics.getQueryExecutionCount() ) .isEqualTo( 0 ); transaction.commit(); clearData( session ); session.close(); }
final Query luceneQuery = queryBuilder.keyword().onField( "product" ).matching( "Polgeiser" ).createQuery(); final FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery, Kernel.class ); fullTextQuery.initializeObjectsWith( ObjectLookupMethod.SECOND_LEVEL_CACHE, DatabaseRetrievalMethod.QUERY ); List list = fullTextQuery.list(); assertThat( list.size() ).isEqualTo( 2 );
final Query luceneQuery = queryBuilder.keyword().onField( "product" ).matching( "Polgeiser" ).createQuery(); final FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery, Kernel.class ); fullTextQuery.initializeObjectsWith( ObjectLookupMethod.PERSISTENCE_CONTEXT, DatabaseRetrievalMethod.QUERY ); List list = fullTextQuery.list(); assertThat( list.size() ).isEqualTo( 2 );
final Query luceneQuery = queryBuilder.keyword().onField( "product" ).matching( "Polgeiser" ).createQuery(); final FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery, Kernel.class ); fullTextQuery.initializeObjectsWith( ObjectLookupMethod.SKIP, DatabaseRetrievalMethod.FIND_BY_ID ); List list = fullTextQuery.list(); assertThat( list.size() ).isEqualTo( 2 );