休眠中的动态数据库名称

时间:2017-04-27 19:23:34

标签: java hibernate java-ee

我想在数据库中创建一个表,之前不知道数据库名称。在运行时,用户创建数据库什么是在运行时切换数据库的最佳方法,只保留一个休眠配置文件?

  

例如,系统创建数据库'Random1',我想   在'Random1'数据库中创建表A.最好的方法是什么?   这里的表定义以前是已知的。

任何帮助都非常适合。

1 个答案:

答案 0 :(得分:1)

我们动态创建新数据库:

session.doWork(new Work() {
                @Override
                public void execute(Connection connection) throws SQLException {
                    boolean autoCommit = connection.getAutoCommit();
                    connection.setAutoCommit(true);
                    Statement stmt = connection.createStatement();
                    stmt.executeUpdate("CREATE DATABASE " + dbName + " WITH TEMPLATE my_template ENCODING 'UTF8'");

                    // set this back to previous value before returning connection to the pool
                    connection.setAutoCommit(autoCommit);
                }
            });

它使用模式模板,其中包含所有表定义。

然后我们构建配置和会话工厂:

public static Configuration buildConfiguration(String serverName, String databaseName) {
        return createConfiguration()
                .setProperty("connection.url", "jdbc:postgresql://" + serverName + ":5432/" + databaseName)
    }

private static Configuration createConfiguration() {
        Configuration configuration = new Configuration().configure(HIBERNATE_CFG_XML_FILE);
        return configuration;
    }

configuration.buildSessionFactory();

hibernate xml文件:

<hibernate-configuration>
    <session-factory>
        <mapping class="com.crowdoptic.database.clustersdata.DeviceData"/>
    </session-factory>

其中DeviceData是常规的hibernate bean:

@Entity
@Table(name="device_data")
public class DeviceData {