Программная настройка URL базы данных / пользователя / пароля в Hibernate - PullRequest
4 голосов
/ 02 июля 2010

Мне нужно централизовать все настройки для нашего веб-приложения на Java в одном файле .properties.У меня все еще может быть файл hibernate.cfg.xml для добавления сопоставлений в классы сущностей, но мне нужно сохранить все наши настройки для базы данных и настраиваемые пути в одном файле .properties.

Первоначально я сохранял свои конфиги в hibernate.cfg.xml следующим образом ....

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">my jdbc connection</property>
        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="connection.username">user</property>
        <property name="connection.password">password</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="hibernate.current_session_context_class">managed</property>
        <mapping class="myEntityClass"/>
    </session-factory>
</hibernate-configuration>

Теперь я хочу переместить «connection.url», «connection.username» и"connection.password" к моему собственному файлу .properties.Код для создания моего класса конфигурации hibernate изменился с.

new AnnotationConfiguration().configure();

на

new AnnotationConfiguration()
                .setProperty("connection.url", databaseUrl)
                .setProperty("connection.username", databaseUser)
                .setProperty("connection.password", databasePassword)
                .configure();

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

Пользователь должен предоставить соединение JDBC

Есть идеи?Мне кажется, что когда Hibernate видит, что эти свойства отсутствуют в файле hibernate.cfg.xml, он предполагает, что все настройки будут добавлены вручную, и полностью игнорирует xml.

Ответы [ 2 ]

4 голосов
/ 02 июля 2010

Из справочной документации по Hibernate:

3.3.Соединения JDBC

[...]

Ниже приведен пример hibernate.properties файла для c3p0:

hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

Адаптируйте его для соответствияваши потребности и поместите hibernate.properties в корень пути к классу (и удалите эквивалентные записи из hibernate.cfg.xml, поскольку файл конфигурации XML переопределяет свойства).Таким образом, на самом деле нет необходимости изменять следующую строку:

new AnnotationConfiguration().configure();

Если вы действительно не хотите, конечно, программной конфигурации.

Но, исходя из сути вашего вопроса, перемещение в .properties файл - это нечто иное, и вы можете положиться на Hibernate: переместите соответствующие свойства с hibernate.cfg.xml на hibernate.properties.

3 голосов
/ 02 июля 2010

Попробуйте установить следующие свойства

properties.put("hibernate.connection.driver_class", "net.sourceforge.jtds.jdbc.Driver");
properties.put("hibernate.connection.url", "jdbc:jtds:sqlserver://test/dbname;SSL=REQUEST");
properties.put("hibernate.cconnection.username", "user");
properties.put("hibernate.connection.password", "password");
properties.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");

, конечно, это для SQL Server, поэтому вам нужно изменить драйвер на «org.gjt.mm.mysql.Driver» и изменить диалект «org»..hibernate.dialect.MySQLInnoDBDialect '

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