2009-11-17 2 views

ответ

5

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

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

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

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

+0

sessionFactory не может быть разрешен переменной. Как я могу его получить? Я просмотрел классы SessionFactory *, чтобы получить экземпляр, но я понятия не имею, что я делаю. Все, что у меня есть, это javax.persistance.EntityManager –

+1

Я не использовал EntityManager, но похоже, что реализация Hibernate - это HibernateEntityManager, у которой есть метод getSession. После сеанса вы можете получить SessionFactory. Итак, что-то вроде ((HibernateEntityManager) entityManager) .getSession(). GetSessionFactory() –

+0

Он работает, спасибо! –

3

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^