public void testNormalBoundary() { EntityPersister persister = sfi().getEntityPersister(Entity.class.getName()); assertClassAssignability(TableGenerator.class, persister.getIdentifierGenerator().getClass()); TableGenerator generator = (TableGenerator) persister.getIdentifierGenerator(); assertClassAssignability( OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass()); OptimizerFactory.HiLoOptimizer optimizer = (OptimizerFactory.HiLoOptimizer) generator.getOptimizer(); int increment = optimizer.getIncrementSize(); Entity[] entities = new Entity[increment + 1]; Session s = openSession(); s.beginTransaction(); for (int i = 0; i < increment; i++) { entities[i] = new Entity("" + (i + 1)); s.save(entities[i]); assertEquals(1, generator.getTableAccessCount()); // initialization assertEquals( 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue()); // initialization assertEquals(i + 1, ((BasicHolder) optimizer.getLastValue()).getActualLongValue()); assertEquals(increment + 1, ((BasicHolder) optimizer.getHiValue()).getActualLongValue()); } // now force a "clock over" entities[increment] = new Entity("" + increment); s.save(entities[increment]); assertEquals(2, generator.getTableAccessCount()); // initialization assertEquals( 2, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue()); // initialization assertEquals(increment + 1, ((BasicHolder) optimizer.getLastValue()).getActualLongValue()); assertEquals((increment * 2) + 1, ((BasicHolder) optimizer.getHiValue()).getActualLongValue()); s.getTransaction().commit(); s.beginTransaction(); for (int i = 0; i < entities.length; i++) { assertEquals(i + 1, entities[i].getId().intValue()); s.delete(entities[i]); } s.getTransaction().commit(); s.close(); }