@Override public void clear() { delegate.clear(); }
@Override public void doAction(boolean successful, SessionImplementor session) { if ( session.isClosed() ) { log.trace( "Session was closed; nothing to do" ); return; } if ( !successful && session.getTransactionCoordinator().getTransactionCoordinatorBuilder().isJta() ) { session.clear(); } } }
@Test @TestForIssue( jiraKey = "HHH-3930" ) public void testEagerFetchBidirectionalOneToOneWithDirectFetching() { inTransaction( session -> { EntityA a = new EntityA( 1L, new EntityB( 2L ) ); session.persist( a ); session.flush(); session.clear(); // Use atomic integer because we need something mutable final AtomicInteger queryExecutionCount = new AtomicInteger(); session.getEventListenerManager().addListener( new StatisticalLoggingSessionEventListener() { @Override public void jdbcExecuteStatementStart() { super.jdbcExecuteStatementStart(); queryExecutionCount.getAndIncrement(); } } ); session.find( EntityA.class, 1L ); assertEquals( "Join fetching inverse one-to-one didn't use the object already present in the result set!", 1, queryExecutionCount.get() ); } ); }
@Test @TestForIssue( jiraKey = "HHH-3930" ) public void testFetchBidirectionalOneToOneWithOneJoinFetch() { inTransaction( session -> { EntityA a = new EntityA( 1L, new EntityB( 2L ) ); session.persist( a ); session.flush(); session.clear(); // Use atomic integer because we need something mutable final AtomicInteger queryExecutionCount = new AtomicInteger(); session.getEventListenerManager().addListener( new StatisticalLoggingSessionEventListener() { @Override public void jdbcExecuteStatementStart() { super.jdbcExecuteStatementStart(); queryExecutionCount.getAndIncrement(); } } ); session.createQuery( "from EntityA a join fetch a.b" ).list(); assertEquals( "Join fetching inverse one-to-one didn't use the object already present in the result set!", 1, queryExecutionCount.get() ); } ); }
@Test @TestForIssue( jiraKey = "HHH-3930" ) public void testFetchBidirectionalOneToOneWithCircularJoinFetch() { inTransaction( session -> { EntityA a = new EntityA( 1L, new EntityB( 2L ) ); session.persist( a ); session.flush(); session.clear(); // Use atomic integer because we need something mutable final AtomicInteger queryExecutionCount = new AtomicInteger(); session.getEventListenerManager().addListener( new StatisticalLoggingSessionEventListener() { @Override public void jdbcExecuteStatementStart() { super.jdbcExecuteStatementStart(); queryExecutionCount.getAndIncrement(); } } ); session.createQuery( "from EntityA a join fetch a.b b join fetch b.a" ).list(); assertEquals( "Join fetching inverse one-to-one didn't use the object already present in the result set!", 1, queryExecutionCount.get() ); } ); }
@Test public void testInsertWithClear() { sessionFactory().getCache().evictEntityRegions(); sessionFactory().getStatistics().clear(); inTransaction( sessionFactory, s -> { CacheableItem item = new CacheableItem( "data" ); s.save( item ); s.flush(); s.clear(); } ); assertTrue( sessionFactory().getCache().containsEntity( CacheableItem.class, 1L ) ); inTransaction( sessionFactory, s -> s.createQuery( "delete CacheableItem" ).executeUpdate() ); }
@Test public void testInsertWithClearThenRollback() { sessionFactory().getCache().evictEntityRegions(); sessionFactory().getStatistics().clear(); inTransaction( sessionFactory, s -> { CacheableItem item = new CacheableItem( "data" ); s.save( item ); s.flush(); s.clear(); item = s.get( CacheableItem.class, item.getId() ); s.getTransaction().markRollbackOnly(); } ); assertFalse( sessionFactory().getCache().containsEntity( CacheableItem.class, 1L ) ); inTransaction( sessionFactory, s -> { final CacheableItem item = s.get( CacheableItem.class, 1L ); assertNull( "it should be null", item ); } ); }
@Override public void clear() { delegate.clear(); }
@Override public void doAction(boolean successful, SessionImplementor session) { if ( session.isClosed() ) { log.trace( "Session was closed; nothing to do" ); return; } if ( !successful && session.getTransactionCoordinator().getTransactionCoordinatorBuilder().isJta() ) { session.clear(); } } }
session.clear();
monitor.entitiesLoaded( list.size() ); indexAllQueue( session, list, sessionInitializer ); session.clear();