BAEL-4057: Hibernate Hi/Lo algorithm example (#9802)
* BAEL-4057: Hibernate Hi/Lo algorithm example * BAEL-4057: fixed code indentation
This commit is contained in:
parent
a098310a5e
commit
e4f034795d
|
@ -0,0 +1,34 @@
|
||||||
|
package com.baeldung.hibernate.hilo;
|
||||||
|
|
||||||
|
import org.hibernate.annotations.GenericGenerator;
|
||||||
|
import org.hibernate.annotations.Parameter;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class RestaurantOrder {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "hilo_sequence_generator")
|
||||||
|
@GenericGenerator(
|
||||||
|
name = "hilo_sequence_generator",
|
||||||
|
strategy = "sequence",
|
||||||
|
parameters = {
|
||||||
|
@Parameter(name = "sequence_name", value = "hilo_seqeunce"),
|
||||||
|
@Parameter(name = "initial_value", value = "1"),
|
||||||
|
@Parameter(name = "increment_size", value = "3"),
|
||||||
|
@Parameter(name = "optimizer", value = "hilo")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
package com.baeldung.hibernate.hilo;
|
||||||
|
|
||||||
|
import org.apache.log4j.BasicConfigurator;
|
||||||
|
import org.apache.log4j.Level;
|
||||||
|
import org.apache.log4j.LogManager;
|
||||||
|
import org.hibernate.HibernateException;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.hibernate.Transaction;
|
||||||
|
import org.hibernate.boot.Metadata;
|
||||||
|
import org.hibernate.boot.MetadataSources;
|
||||||
|
import org.hibernate.boot.SessionFactoryBuilder;
|
||||||
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
|
import org.hibernate.service.ServiceRegistry;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
public class HibernateHiloUnitTest {
|
||||||
|
private Session session;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
|
try {
|
||||||
|
configureLogger();
|
||||||
|
|
||||||
|
ServiceRegistry serviceRegistry = configureServiceRegistry();
|
||||||
|
SessionFactory factory = getSessionFactoryBuilder(serviceRegistry).build();
|
||||||
|
session = factory.openSession();
|
||||||
|
} catch (HibernateException | IOException e) {
|
||||||
|
fail("Failed to initiate Hibernate Session [Exception:" + e.toString() + "]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void configureLogger() {
|
||||||
|
BasicConfigurator.configure();
|
||||||
|
LogManager.getLogger("org.hibernate").setLevel(Level.ERROR);
|
||||||
|
LogManager.getLogger("org.hibernate.id.enhanced.SequenceStructure").setLevel(Level.DEBUG);
|
||||||
|
LogManager.getLogger("org.hibernate.event.internal.AbstractSaveEventListener").setLevel(Level.DEBUG);
|
||||||
|
LogManager.getLogger("org.hibernate.SQL").setLevel(Level.DEBUG);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static SessionFactoryBuilder getSessionFactoryBuilder(ServiceRegistry serviceRegistry) {
|
||||||
|
MetadataSources metadataSources = new MetadataSources(serviceRegistry);
|
||||||
|
metadataSources.addAnnotatedClass(RestaurantOrder.class);
|
||||||
|
Metadata metadata = metadataSources.buildMetadata();
|
||||||
|
|
||||||
|
return metadata.getSessionFactoryBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ServiceRegistry configureServiceRegistry() throws IOException {
|
||||||
|
Properties properties = getProperties();
|
||||||
|
|
||||||
|
return new StandardServiceRegistryBuilder().applySettings(properties)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Properties getProperties() throws IOException {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
URL propertiesURL = getPropertiesURL();
|
||||||
|
|
||||||
|
try (FileInputStream inputStream = new FileInputStream(propertiesURL.getFile())) {
|
||||||
|
properties.load(inputStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static URL getPropertiesURL() {
|
||||||
|
return Thread.currentThread()
|
||||||
|
.getContextClassLoader()
|
||||||
|
.getResource("hibernate-hilo.properties");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenHiLoAlgorithm_when9EntitiesArePersisted_Then3callsToDBForNextValueShouldBeMade() {
|
||||||
|
Transaction transaction = session.beginTransaction();
|
||||||
|
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
session.persist(new RestaurantOrder());
|
||||||
|
session.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
transaction.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void cleanup() {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
hibernate.connection.driver_class=org.h2.Driver
|
||||||
|
hibernate.connection.url=jdbc:h2:mem:hilo_db;DB_CLOSE_DELAY=-1
|
||||||
|
hibernate.connection.username=sa
|
||||||
|
hibernate.dialect=org.hibernate.dialect.H2Dialect
|
||||||
|
hibernate.show_sql=true
|
||||||
|
hibernate.hbm2ddl.auto=create-drop
|
||||||
|
hibernate.c3p0.min_size=5
|
||||||
|
hibernate.c3p0.max_size=20
|
||||||
|
hibernate.c3p0.acquire_increment=5
|
||||||
|
hibernate.c3p0.timeout=1800
|
Loading…
Reference in New Issue