use of org.hibernate.id.enhanced.SequenceStyleGenerator in project hibernate-orm by hibernate.
the class SequenceHiLoGeneratorNoIncrementTest method setUp.
@Before
public void setUp() throws Exception {
serviceRegistry = new StandardServiceRegistryBuilder().enableAutoClose().applySetting(AvailableSettings.HBM2DDL_AUTO, "create-drop").build();
generator = new SequenceStyleGenerator();
// Build the properties used to configure the id generator
Properties properties = new Properties();
properties.setProperty(SequenceStyleGenerator.SEQUENCE_PARAM, TEST_SEQUENCE);
properties.setProperty(SequenceStyleGenerator.OPT_PARAM, "legacy-hilo");
// JPA allocationSize of 1
properties.setProperty(SequenceStyleGenerator.INCREMENT_PARAM, "0");
properties.put(PersistentIdentifierGenerator.IDENTIFIER_NORMALIZER, new ObjectNameNormalizer() {
@Override
protected MetadataBuildingContext getBuildingContext() {
return new MetadataBuildingContextTestingImpl(serviceRegistry);
}
});
generator.configure(StandardBasicTypes.LONG, properties, serviceRegistry);
final Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
generator.registerExportables(metadata.getDatabase());
sessionFactory = (SessionFactoryImplementor) metadata.buildSessionFactory();
sequenceValueExtractor = new SequenceValueExtractor(sessionFactory.getDialect(), TEST_SEQUENCE);
}
use of org.hibernate.id.enhanced.SequenceStyleGenerator in project hibernate-orm by hibernate.
the class NewGeneratorMappingsTest method testCompleteSequenceEntity.
@Test
public void testCompleteSequenceEntity() {
final EntityPersister persister = sessionFactory().getEntityPersister(CompleteSequenceEntity.class.getName());
IdentifierGenerator generator = persister.getIdentifierGenerator();
assertTrue(SequenceStyleGenerator.class.isInstance(generator));
SequenceStyleGenerator seqGenerator = (SequenceStyleGenerator) generator;
assertEquals(1000, seqGenerator.getDatabaseStructure().getInitialValue());
assertEquals(52, seqGenerator.getDatabaseStructure().getIncrementSize());
assertFalse(NoopOptimizer.class.isInstance(seqGenerator.getOptimizer()));
}
use of org.hibernate.id.enhanced.SequenceStyleGenerator in project hibernate-orm by hibernate.
the class HibernateSequenceTest method testHibernateSequenceSchema.
@Test
public void testHibernateSequenceSchema() {
EntityPersister persister = sessionFactory().getEntityPersister(HibernateSequenceEntity.class.getName());
IdentifierGenerator generator = persister.getIdentifierGenerator();
Assert.assertTrue(SequenceStyleGenerator.class.isInstance(generator));
SequenceStyleGenerator seqGenerator = (SequenceStyleGenerator) generator;
Assert.assertEquals(Table.qualify(null, SCHEMA_NAME, SequenceStyleGenerator.DEF_SEQUENCE_NAME), seqGenerator.getDatabaseStructure().getName());
}
use of org.hibernate.id.enhanced.SequenceStyleGenerator 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();
}
use of org.hibernate.id.enhanced.SequenceStyleGenerator in project hibernate-orm by hibernate.
the class HiLoForcedTableSequenceTest 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("hilo optimizer was not used", HiLoOptimizer.class.isInstance(generator.getOptimizer()));
HiLoOptimizer optimizer = (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]);
long expectedId = i + 1;
assertEquals(expectedId, entities[i].getId().longValue());
assertEquals(1, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
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]);
long expectedId = optimizer.getIncrementSize() + 1;
assertEquals(expectedId, entities[optimizer.getIncrementSize()].getId().longValue());
// initialization + clock-over
assertEquals(2, ((BasicHolder) optimizer.getLastSourceValue()).getActualLongValue());
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();
}
Aggregations