Example usage for org.hibernate.boot SchemaAutoTooling NONE

List of usage examples for org.hibernate.boot SchemaAutoTooling NONE

Introduction

In this page you can find the example usage for org.hibernate.boot SchemaAutoTooling NONE.

Prototype

SchemaAutoTooling NONE

To view the source code for org.hibernate.boot SchemaAutoTooling NONE.

Click Source Link

Document

Do not attempt to update nor validate the schema.

Usage

From source file:org.grails.orm.hibernate.HibernateDatastore.java

License:Apache License

private void addTenantForSchemaInternal(String schemaName) {
    if (multiTenantMode != MultiTenancySettings.MultiTenancyMode.SCHEMA) {
        throw new ConfigurationException(
                "The method [addTenantForSchema] can only be called with multi-tenancy mode SCHEMA. Current mode is: "
                        + multiTenantMode);
    }/*from w ww .j a  v  a2  s  . co m*/
    HibernateConnectionSourceFactory factory = (HibernateConnectionSourceFactory) connectionSources
            .getFactory();
    HibernateConnectionSource defaultConnectionSource = (HibernateConnectionSource) connectionSources
            .getDefaultConnectionSource();
    HibernateConnectionSourceSettings tenantSettings;
    try {
        tenantSettings = connectionSources.getDefaultConnectionSource().getSettings().clone();
    } catch (CloneNotSupportedException e) {
        throw new ConfigurationException("Couldn't clone default Hibernate settings! " + e.getMessage(), e);
    }
    tenantSettings.getHibernate().put("default_schema", schemaName);

    String dbCreate = tenantSettings.getDataSource().getDbCreate();

    SchemaAutoTooling schemaAutoTooling = dbCreate != null ? SchemaAutoTooling.interpret(dbCreate) : null;
    if (schemaAutoTooling != null && schemaAutoTooling != SchemaAutoTooling.VALIDATE
            && schemaAutoTooling != SchemaAutoTooling.NONE) {

        Connection connection = null;
        try {
            connection = defaultConnectionSource.getDataSource().getConnection();
            try {
                schemaHandler.useSchema(connection, schemaName);
            } catch (Exception e) {
                // schema doesn't exist
                schemaHandler.createSchema(connection, schemaName);
            }
        } catch (SQLException e) {
            throw new DatastoreConfigurationException(
                    String.format("Failed to create schema for name [%s]", schemaName));
        } finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    //ignore
                }
            }
        }
    }

    DefaultConnectionSource<DataSource, DataSourceSettings> dataSourceConnectionSource = new DefaultConnectionSource<>(
            schemaName, defaultConnectionSource.getDataSource(), tenantSettings.getDataSource());
    ConnectionSource<SessionFactory, HibernateConnectionSourceSettings> connectionSource = factory
            .create(schemaName, dataSourceConnectionSource, tenantSettings);
    SingletonConnectionSources<SessionFactory, HibernateConnectionSourceSettings> singletonConnectionSources = new SingletonConnectionSources<>(
            connectionSource, connectionSources.getBaseConfiguration());
    HibernateDatastore childDatastore = new HibernateDatastore(singletonConnectionSources,
            (HibernateMappingContext) mappingContext, eventPublisher) {
        @Override
        protected HibernateGormEnhancer initialize() {
            return null;
        }
    };
    datastoresByConnectionSource.put(connectionSource.getName(), childDatastore);
}