Search in sources :

Example 1 with PooledOptimizer

use of org.hibernate.id.enhanced.PooledOptimizer in project hibernate-orm by hibernate.

the class PooledSequenceTest method testNormalBoundary.

@Test
public void testNormalBoundary() {
    EntityPersister persister = sessionFactory().getEntityPersister(Entity.class.getName());
    assertClassAssignability(SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass());
    SequenceStyleGenerator generator = (SequenceStyleGenerator) persister.getIdentifierGenerator();
    assertClassAssignability(PooledOptimizer.class, generator.getOptimizer().getClass());
    PooledOptimizer optimizer = (PooledOptimizer) generator.getOptimizer();
    int increment = optimizer.getIncrementSize();
    Entity[] entities = new Entity[increment + 2];
    Session s = openSession();
    s.beginTransaction();
    for (int i = 0; i <= increment; i++) {
        entities[i] = new Entity("" + (i + 1));
        s.save(entities[i]);
        // initialization calls seq twice
        assertEquals(2, generator.getDatabaseStructure().getTimesAccessed());
        // initialization calls seq twice
        assertEquals(increment + 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
        assertEquals(i + 1, ((BasicHolder) optimizer.getLastValue()).getActualLongValue());
        assertEquals(increment + 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
    }
    // now force a "clock over"
    entities[increment + 1] = new Entity("" + increment);
    s.save(entities[increment + 1]);
    // initialization (2) + clock over
    assertEquals(3, generator.getDatabaseStructure().getTimesAccessed());
    // initialization (2) + clock over
    assertEquals((increment * 2) + 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
    assertEquals(increment + 2, ((BasicHolder) optimizer.getLastValue()).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();
}
Also used : EntityPersister(org.hibernate.persister.entity.EntityPersister) PooledOptimizer(org.hibernate.id.enhanced.PooledOptimizer) SequenceStyleGenerator(org.hibernate.id.enhanced.SequenceStyleGenerator) Session(org.hibernate.Session) Test(org.junit.Test)

Example 2 with PooledOptimizer

use of org.hibernate.id.enhanced.PooledOptimizer in project hibernate-orm by hibernate.

the class PooledForcedTableSequenceTest method testNormalBoundary.

@Test
public void testNormalBoundary() {
    EntityPersister persister = sessionFactory().getEntityPersister(Entity.class.getName());
    assertTrue("sequence style generator was not used", SequenceStyleGenerator.class.isInstance(persister.getIdentifierGenerator()));
    SequenceStyleGenerator generator = (SequenceStyleGenerator) persister.getIdentifierGenerator();
    assertTrue("table structure was not used", TableStructure.class.isInstance(generator.getDatabaseStructure()));
    assertTrue("pooled optimizer was not used", PooledOptimizer.class.isInstance(generator.getOptimizer()));
    PooledOptimizer optimizer = (PooledOptimizer) generator.getOptimizer();
    int increment = optimizer.getIncrementSize();
    Entity[] entities = new Entity[increment + 2];
    Session s = openSession();
    s.beginTransaction();
    for (int i = 0; i <= increment; i++) {
        entities[i] = new Entity("" + (i + 1));
        s.save(entities[i]);
        long expectedId = i + 1;
        assertEquals(expectedId, entities[i].getId().longValue());
        // NOTE : initialization calls table twice
        assertEquals(2, generator.getDatabaseStructure().getTimesAccessed());
        assertEquals(increment + 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
        assertEquals(i + 1, ((BasicHolder) optimizer.getLastValue()).getActualLongValue());
        assertEquals(increment + 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
    }
    // now force a "clock over"
    entities[increment + 1] = new Entity("" + increment);
    s.save(entities[increment + 1]);
    long expectedId = optimizer.getIncrementSize() + 2;
    assertEquals(expectedId, entities[increment + 1].getId().longValue());
    // initialization (2) + clock over
    assertEquals(3, generator.getDatabaseStructure().getTimesAccessed());
    assertEquals((increment * 2) + 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
    assertEquals(increment + 2, ((BasicHolder) optimizer.getLastValue()).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();
}
Also used : EntityPersister(org.hibernate.persister.entity.EntityPersister) PooledOptimizer(org.hibernate.id.enhanced.PooledOptimizer) TableStructure(org.hibernate.id.enhanced.TableStructure) SequenceStyleGenerator(org.hibernate.id.enhanced.SequenceStyleGenerator) Session(org.hibernate.Session) Test(org.junit.Test)

Example 3 with PooledOptimizer

use of org.hibernate.id.enhanced.PooledOptimizer in project hibernate-orm by hibernate.

the class PooledTableTest method testNormalBoundary.

@Test
public void testNormalBoundary() {
    EntityPersister persister = sessionFactory().getEntityPersister(Entity.class.getName());
    assertClassAssignability(TableGenerator.class, persister.getIdentifierGenerator().getClass());
    TableGenerator generator = (TableGenerator) persister.getIdentifierGenerator();
    assertClassAssignability(PooledOptimizer.class, generator.getOptimizer().getClass());
    PooledOptimizer optimizer = (PooledOptimizer) generator.getOptimizer();
    int increment = optimizer.getIncrementSize();
    Entity[] entities = new Entity[increment + 2];
    Session s = openSession();
    s.beginTransaction();
    for (int i = 0; i <= increment; i++) {
        entities[i] = new Entity("" + (i + 1));
        s.save(entities[i]);
        // initialization calls seq twice
        assertEquals(2, generator.getTableAccessCount());
        // initialization calls seq twice
        assertEquals(increment + 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
        assertEquals(i + 1, ((BasicHolder) optimizer.getLastValue()).getActualLongValue());
        assertEquals(increment + 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
    }
    // now force a "clock over"
    entities[increment + 1] = new Entity("" + increment);
    s.save(entities[increment + 1]);
    // initialization (2) + clock over
    assertEquals(3, generator.getTableAccessCount());
    // initialization (2) + clock over
    assertEquals((increment * 2) + 1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
    assertEquals(increment + 2, ((BasicHolder) optimizer.getLastValue()).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();
}
Also used : EntityPersister(org.hibernate.persister.entity.EntityPersister) PooledOptimizer(org.hibernate.id.enhanced.PooledOptimizer) TableGenerator(org.hibernate.id.enhanced.TableGenerator) Session(org.hibernate.Session) Test(org.junit.Test)

Aggregations

Session (org.hibernate.Session)3 PooledOptimizer (org.hibernate.id.enhanced.PooledOptimizer)3 EntityPersister (org.hibernate.persister.entity.EntityPersister)3 Test (org.junit.Test)3 SequenceStyleGenerator (org.hibernate.id.enhanced.SequenceStyleGenerator)2 TableGenerator (org.hibernate.id.enhanced.TableGenerator)1 TableStructure (org.hibernate.id.enhanced.TableStructure)1