Строка подключения Hibernate делает имя базы данных MS SQL Server 2008 с фигурными скобками - PullRequest
0 голосов
/ 10 марта 2020

Мне нужно подключиться к базе данных, в имени которой есть фигурные скобки - { и } (кто мог это сделать ?!). Таким образом, имя базы данных выглядит как Production{guid-part-123123-123123-abcd}, и я получаю ошибки, когда пытаюсь подключить его.

Строка подключения:

public synchronized static SessionFactory getSessionFactory(String dbName) {

        String url = String.format("jdbc:sqlserver://someServer:1433;databaseName=%s", dbName); // what can I do to give proper database name?

        return new Configuration().configure()
            .setProperty("hibernate.connection.driver_class", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
            .setProperty("hibernate.default_schema", "dbo")
            .setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect")
            .setProperty("hibernate.connection.username", "admin")
            .setProperty("hibernate.connection.password", "admin")
            .setProperty("hibernate.connection.url", url)
            .buildSessionFactory();
    }

Как правильно построить строку URL / подключения? Соединение с другими базами данных на этом сервере работает, но если имя базы данных содержит «{}», оно не будет установлено.

1 Ответ

0 голосов
/ 26 марта 2020

Наконец-то мне удалось решить эту проблему, это очень просто, но потребовались дни, чтобы понять это. Проверьте это:

public synchronized static SessionFactory getSessionFactory(String dbName) {

    String url = "jdbc:sqlserver://someServer:1433"; // we should skip here database name

    return new Configuration().configure()
        .setProperty("hibernate.connection.driver_class", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
        .setProperty("hibernate.default_schema", "dbo")
        .setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect")
        .setProperty("hibernate.connection.username", "admin")
        .setProperty("hibernate.connection.password", "admin")
        .setProperty("hibernate.connection.url", url) // url is parsed by DriverManager class
        .setProperty("hibernate.connection.databaseName", dbName) // this property is not parsed but just used
        .buildSessionFactory();
}

Как видите, для его решения вам нужно передать dbName как свойство, а это значит, что он не анализируется. Чтобы найти решение мне помог этот ответ: { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...