спящий режим - проблема справки - PullRequest
1 голос
/ 13 мая 2009

У меня проблема.

Мое приложение использует 1) существующее соединение гибернации для получения некоторых данных. Теперь нужно 2) обновить некоторые таблицы в той же БД, из которой извлекаются данные, и это должно происходить через отдельное соединение.

Возможно ли отдельно для этой цели иметь файл hibernate.cfg.xml?

если так, как я буду различать соединения.

Или я не могу использовать сам Hibernate для второго случая?

любезно помогите.

Ответы [ 2 ]

0 голосов
/ 13 мая 2009

Есть два способа сделать это. Вы можете явно передать файл конфигурации XML в конфигурацию:

AnnotationConfiguration cfg1 = new AnnotationConfiguration();
cfg.configure("/hibernate1.cfg.xml");

AnnotationConfiguration cfg2 = new AnnotationConfiguration();
cfg.configure("/hibernate2.cfg.xml");

Или вы можете вручную обновить свойства базы данных перед получением SessionFactory:

Configuration cfg1 = new Configuration();
cfg1.addClass(...)
Properties p = new Properties();
p.put(Environment.DATASOURCE, "jdbc/database1"); // if using JNDI
p.put(Environment.URL, DRIVER, etc..) // if using a direction connection
cfg1.addProperties(p);
cfg1.buildSessionFactory();

... повторите для других конфигураций, используя другие свойства

Как бы вы это ни делали, вы просто получаете сеанс из правильной фабрики сеансов.

0 голосов
/ 13 мая 2009

Не протестировав этот сценарий, это станет возможным с Hibernate. Вам необходимо настроить два SessionFactory с использованием одного и того же сопоставления, но разных конфигураций для соединения (-> hibernate.cfg.xml). В приложении использование будет выглядеть как

// read entry using first session factory
Session sessionForRead = readSessionFactory.getCurrentSession(); // or openSession()
sessionForRead.beginTransaction();
MyEntry entry = (MyEntry) sessionForRead.load(MyEntry.class, someId) // or whatever to load entries
sessionForRead.getTransaction().commit();

// update entry using the other session factory
Session sessionForUpdate = updateSessionFactpry.getCurrentSession(); // or openSession()
sessionForUpdate.beginTransaction();
sessionForUpdate.update(entry);
sessionForUpdate.getTransaction().commit();

Существует также метод для открытия сеанса с данным JDBC-соединением (см. JavaDoc для SessionFactory ), но я никогда не использовал его. Возможно, вы могли бы попробовать. Однако первое решение выглядит мне чище.

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