LINUX.ORG.RU

hibernate


0

0

Каким образом можно во время выполнения программы изменить настройки, указанные в hibernate.cfg.xml ? Например, есть такое содержимое:

... <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/db1</property> <property name="connection.username">user</property> <property name="connection.password">pass</property> <property name="connection.useUnicode">yes</property> <property name="connection.characterEncoding">utf8</property> ...

После старта программы я хочу изменить свойство connection.url. Пробую:

Configuration configuration = new Configuration() .configure() .setProperty("connection.url", "jdbc:mysql://192.168.2.1/db1"); sessions = configuration.buildSessionFactory();

Если вызвать getProperty, то оно вернёт изменённое значение, но хибернейт всё равно будет использовать значение из конфига. Есть вариант решения?

anonymous

Простите за форматирование.

Каким образом можно во время выполнения программы изменить настройки, 
указанные в hibernate.cfg.xml ? Например, есть такое содержимое:

...
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/db1</property>
<property name="connection.username">user</property>
<property name="connection.password">pass</property>
<property name="connection.useUnicode">yes</property>
<property name="connection.characterEncoding">utf8</property>
...

После старта программы я хочу изменить свойство connection.url.
Пробую:

Configuration configuration = new Configuration()
.configure()
.setProperty("connection.url", "jdbc:mysql://192.168.2.1/db1");
sessions = configuration.buildSessionFactory();

Если вызвать getProperty, то оно вернёт изменённое значение, но 
хибернейт всё равно будет использовать значение из конфига. Есть 
вариант решения?

anonymous
()

Делаешь новую SessionFactory и используешь её. У уже созданной, афаик, нельзя поменять URL.

Legioner ★★★★★
()
Ответ на: комментарий от anonymous

Configuration configuration = new Configuration();
configuration.setProperty("connection.url", "jdbc:mysql://192.168.2.1/db1");
configuration.configure();
sessions = configuration.buildSessionFactory();

Только как то так вроде надо.

Legioner ★★★★★
()
Ответ на: комментарий от anonymous

Как вариант, можно создавать SessionFactory передавая разные конфигурационные файлы.

Пример:

SessionFactory sf = new Configuration() .configure("catdb.cfg.xml") .buildSessionFactory();

SessionFactory sf2 = new Configuration() .configure("catdb2.cfg.xml") .buildSessionFactory();

Falgrim
()
Ответ на: комментарий от Falgrim

Да, можно, но так не подойдёт: мне необходимо задавать параметры подключения в runtime — я их получаю из GUI от пользователя. В принципе, в конфиге может и вовсе не быть параметров url, user и password, но вот остальные (диалект, кодировка и т.п.) хотелось бы оставить. А хибернейт так не хочет — он не создаёт фактори, если в конфиге нет этих параметров, а если они там есть — игнориурет их изменение. Пока, как я понял, можно сделать только так: мэппинги оставить в файле и грузить их отдельно, а все настройки задавать из runtime.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.