Я использую hibernate с jpa, и он настроен с persistence.xml Возможно ли получить свойства подключения спящего режима из веб-приложения?Как получить свойства конфигурации гибернации?
Спасибо.
Я использую hibernate с jpa, и он настроен с persistence.xml Возможно ли получить свойства подключения спящего режима из веб-приложения?Как получить свойства конфигурации гибернации?
Спасибо.
Возможно, не без использования рефлексии и использования Hibernate, чтобы не сломать ваш код в будущем. Вам нужно получить свойства из SessionFactory, но он не является общедоступным, поэтому вам нужно будет найти поле через отражение, а затем использовать field.setAccessible, чтобы получить к нему доступ. Что-то вроде:
Field f = SessionFactoryImpl.class.getDeclaredField("properties");
f.setAccessible(true);
Properties p = (Properties)f.get(sessionFactory);
Затем используйте константы в среде, чтобы вытащить соответствующие настройки. Если вы ищете фактические параметры подключения к базе данных, и ваше приложение использует jndi, тогда вы можете использовать имя jndi для получения DataSource и изучить это, чтобы получить информацию о подключении.
Для этого типа я обычно просто использую отладчик, устанавливаю точку останова, а затем выворачиваю вокруг переменных, пока не найду, где находится информация; затем посмотрите, доступно ли это публично, а если нет, используйте рефлексию, чтобы добраться до нее. Однако никаких гарантий нет.
Если вы используете JDBC, вы всегда можете получить соединение и его метаданные. Если вы используете менеджер транзакций Spring можно получить так:
transactionManager.getDataSource().getConnection().getMetaData()
Это показывает tons of information о вашей базе данных и ее связи, включая имя пользователя. В файле persistence.xml есть некоторая информация, которая может иметь дело с пулом соединений с базой данных, который обычно не хранится нигде в Hibernate, а в самом деле, связанном с пулом.
Какую информацию вы хотите получить из файла persistence.xml?
sessionFactory не может быть разрешен переменной. Как я могу его получить? Я просмотрел классы SessionFactory *, чтобы получить экземпляр, но я понятия не имею, что я делаю. Все, что у меня есть, это javax.persistance.EntityManager –
Я не использовал EntityManager, но похоже, что реализация Hibernate - это HibernateEntityManager, у которой есть метод getSession. После сеанса вы можете получить SessionFactory. Итак, что-то вроде ((HibernateEntityManager) entityManager) .getSession(). GetSessionFactory() –
Он работает, спасибо! –