Example usage for org.hibernate.boot.model.naming ImplicitNamingStrategyJpaCompliantImpl INSTANCE

List of usage examples for org.hibernate.boot.model.naming ImplicitNamingStrategyJpaCompliantImpl INSTANCE

Introduction

In this page you can find the example usage for org.hibernate.boot.model.naming ImplicitNamingStrategyJpaCompliantImpl INSTANCE.

Prototype

ImplicitNamingStrategy INSTANCE

To view the source code for org.hibernate.boot.model.naming ImplicitNamingStrategyJpaCompliantImpl INSTANCE.

Click Source Link

Usage

From source file:to.etc.domui.hibernate.config.HibernateConfigurator.java

License:Open Source License

/**
 * Main worker to initialize the database layer, using Hibernate, with a user-specified core data source. This
 * code also enables SQL logging when .developer.properties option hibernate.sql=true.
 *///from www.  j  a  v a2  s.c o m
public synchronized static void initialize(final DataSource ds) throws Exception {
    System.setProperty("org.jboss.logging.provider", "slf4j"); // Thanks to https://stackoverflow.com/questions/11639997/how-do-you-configure-logging-in-hibernate-4-to-use-slf4j
    if (m_sessionFactory != null)
        throw new IllegalStateException("HibernateConfigurator has already been initialized!");
    if (m_annotatedClassList.size() == 0)
        throw new IllegalStateException(
                "Please call addClasses(Class<?>...) and register your Hibernate data classes before calling me.");

    long ts = System.nanoTime();
    m_dataSource = ds;

    // see https://www.boraji.com/hibernate-5-event-listener-example

    //-- Create Hibernate's config. See https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/chapters/bootstrap/Bootstrap.html
    /*
     * Hibernate apparently cannot initialize without the useless hibernate.cfg.xml file. We cannot
     * add that file at the root location because that would interfere with applications. To have a
     * working model we add it as a resource in this class's package. And of course Hibernate makes
     * it hard to reach- we need to calculate the proper name, sigh.
     */
    BootstrapServiceRegistry bootstrapRegistry = new BootstrapServiceRegistryBuilder()
            .applyIntegrator(new JpaIntegrator()).build();

    String resname = "/" + HibernateConfigurator.class.getPackage().getName().replace('.', '/')
            + "/hibernate.cfg.xml";
    StandardServiceRegistryBuilder serviceBuilder = new StandardServiceRegistryBuilder(bootstrapRegistry)
            .configure(resname);

    /*
     * Set other properties according to config settings made.
     */
    serviceBuilder.applySetting("hibernate.connection.datasource", ds);
    boolean logsql;
    if (m_showSQL == null)
        logsql = DeveloperOptions.getBool("hibernate.sql", false); // Take default from .developer.properties
    else
        logsql = m_showSQL.booleanValue();

    if (logsql) {
        serviceBuilder.applySetting("show_sql", "true");
        serviceBuilder.applySetting("hibernate.show_sql", "true");
    }

    /*
     * Hibernate defaults to completely non-standard behavior for sequences, using the
     * "hilo" sequence generator by default. This irresponsible behavior means that
     * by default Hibernate code is incompatible with any code using sequences.
     * Since that is irresponsible and downright DUMB this reverts the behavior to
     * using sequences in their normal behavior.
     * See https://stackoverflow.com/questions/12745751/hibernate-sequencegenerator-and-allocationsize
     */
    serviceBuilder.applySetting("hibernate.id.new_generator_mappings", "true"); // MUST BE BEFORE config.configure

    m_hibernateOptions.forEach((option, value) -> serviceBuilder.applySetting(option, value));

    if (DeveloperOptions.getBool("hibernate.format_sql", true)) {
        serviceBuilder.applySetting("hibernate.format_sql", "true");
    }

    switch (m_mode) {
    default:
        throw new IllegalStateException("Mode: " + m_mode);
    case CREATE:
        serviceBuilder.applySetting("hbm2ddl.auto", "create");
        serviceBuilder.applySetting("hibernate.hbm2ddl.auto", "create");
        break;
    case NONE:
        serviceBuilder.applySetting("hbm2ddl.auto", "none");
        serviceBuilder.applySetting("hibernate.hbm2ddl.auto", "none");
        break;
    case UPDATE:
        serviceBuilder.applySetting("hbm2ddl.auto", "update");
        serviceBuilder.applySetting("hibernate.hbm2ddl.auto", "update");
        break;
    }

    // change settings
    for (IHibernateConfigListener listener : m_onConfigureList) {
        listener.onSettings(serviceBuilder);
    }

    ServiceRegistry reg = serviceBuilder.build();
    MetadataSources sources = new MetadataSources(reg);

    for (Class<?> clz : m_annotatedClassList)
        sources.addAnnotatedClass(clz);

    // add classes
    for (IHibernateConfigListener listener : m_onConfigureList) {
        listener.onAddSources(sources);
    }

    Metadata metaData = sources.getMetadataBuilder()
            .applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE).build();

    enhanceMappings(metaData);

    //for(Consumer<Configuration> listener : m_onConfigureList) {
    //   listener.accept(config);
    //}

    //-- Create the session factory: this completes the Hibernate config part.
    SessionFactoryBuilder sessionFactoryBuilder = metaData.getSessionFactoryBuilder();

    //      sessionFactoryBuilder.applyInterceptor( new CustomSessionFactoryInterceptor() );

    //sessionFactoryBuilder.addSessionFactoryObservers( new CustomSessionFactoryObserver() );

    // Apply a CDI BeanManager ( for JPA event listeners )
    //sessionFactoryBuilder.applyBeanManager( getBeanManager() );

    SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) sessionFactoryBuilder.build();
    m_sessionFactory = sessionFactory;

    EventListenerRegistry listenerRegistry = sessionFactory.getServiceRegistry()
            .getService(EventListenerRegistry.class);
    if (m_beforeImagesEnabled) {
        // https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/chapters/events/Events.html
        listenerRegistry.prependListeners(EventType.POST_LOAD, new CreateBeforeImagePostLoadListener());
        listenerRegistry.prependListeners(EventType.INIT_COLLECTION, new CopyCollectionEventListener());
    }
    for (IHibernateConfigListener listener : m_onConfigureList) {
        listener.onAddListeners(listenerRegistry);
    }

    //-- Start DomUI/WebApp.core initialization: generalized database layer
    HibernateSessionMaker hsm;
    if (m_beforeImagesEnabled) {
        //-- We need the copy interceptor to handle these.
        hsm = dc -> {
            return m_sessionFactory.withOptions().interceptor(new BeforeImageInterceptor(dc.getBeforeCache()))
                    .openSession();
            //return m_sessionFactory.openSession(new BeforeImageInterceptor(dc.getBeforeCache()));
        };
    } else {
        hsm = dc -> m_sessionFactory.openSession();
    }

    //-- If no handlers are registered: register the default ones.
    if (m_handlers.size() == 0) {
        m_handlers.register(JdbcQueryExecutor.FACTORY);
        m_handlers.register(HibernateQueryExecutor.FACTORY);
    }

    m_contextSource = new HibernateLongSessionContextFactory(m_listeners, hsm, m_handlers);
    System.out.println("domui: Hibernate initialization took a whopping "
            + StringTool.strNanoTime(System.nanoTime() - ts));
}