Как получить свойства конфигурации Hibernate? - PullRequest
2 голосов
/ 17 ноября 2009

Я использую hibernate с jpa, и он настроен с помощью persistence.xml Можно ли получить свойства подключения гибернации из веб-приложения?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 17 ноября 2009

Вероятно, не без размышлений и полагаться на Hibernate, чтобы не сломать ваш код в будущем. Вам необходимо получить свойства из SessionFactory, но они не являются общедоступными, поэтому вам нужно будет найти поле с помощью отражения, а затем использовать field.setAccessible, чтобы получить к нему доступ. Что-то вроде:

Field f = SessionFactoryImpl.class.getDeclaredField("properties");
f.setAccessible(true);
Properties p = (Properties)f.get(sessionFactory);

Затем используйте константы в Environment для извлечения соответствующих настроек. Если вы ищете фактические настройки соединения с базой данных, а ваше приложение использует jndi, то, возможно, вы можете использовать имя jndi, чтобы получить DataSource и проверить его, чтобы получить информацию о соединении.

Для такого типа вещей я обычно просто использую отладчик, устанавливаю точку останова, а затем копаюсь в переменных, пока не найду, где находится информация; затем посмотрите, является ли он общедоступным, и если нет, используйте отражение, чтобы добраться до него. Хотя нет никаких гарантий.

3 голосов
/ 17 ноября 2009

Если вы используете JDBC, вы всегда можете получить соединение и его метаданные. Если вы используете диспетчер транзакций Spring, вы можете получить его так:

transactionManager.getDataSource().getConnection().getMetaData()

Это показывает тонн информации о вашей базе данных и ее подключении, включая имя пользователя. В файле persistence.xml есть некоторая информация, которая может относиться к пулу соединений с базой данных, которая обычно хранится не в Hibernate, а в самом коде пула соединений.

Какую информацию вам нужно получить из файла persistence.xml?

...