Правильно ли я настроил файл Hibernate hibernate.cfg.xml?

Я впервые использую Hibernate (4.2.3) в проекте. Я пытаюсь заставить его подключиться к встроенной (локальной) БД H2 и иметь h2-1.3.173.jar в пути к классам, а также все JAR-файлы Hibernate. Я получаю некоторые тревожные сообщения об ошибках от Hibernate в своем журнале, которые заставляют меня задаться вопросом, правильно ли я настраиваю Hibernate. Вот вывод, который я вижу в журналах:

604 [main] INFO org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
707 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {4.2.3.Final}
769 [main] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
771 [main] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
2192 [main] INFO org.hibernate.cfg.Configuration - HHH000043: Configuring from resource: hibernate.cfg.xml
2192 [main] INFO org.hibernate.cfg.Configuration - HHH000040: Configuration resource: hibernate.cfg.xml
2835 [main] INFO org.hibernate.cfg.Configuration - HHH000041: Configured SessionFactory: null
3313 [main] INFO org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000402: Using Hibernate built-in connection pool (not for production use!)
3313 [main] WARN org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000148: No JDBC Driver class was specified by property hibernate.connection.driver_class
3313 [main] INFO org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000115: Hibernate connection pool size: 1
3313 [main] INFO org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000006: Autocommit mode: false

А вот мой hibernate.cfg.xml файл:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- DataSource & Connection info. -->
        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
        <property name="hibernate.connection.driver.class">org.h2.Driver</property>
        <property name="hibernate.connection.url">jdbc:h2:file:/${MYAPP_HOME}/data/myapp_db</property>
        <property name="hibernate.connection.username">myapp</property>
        <property name="hibernate.connection.password">12345</property>
        <property name="hibernate.connection.pool_size">1</property>

        <!-- General Hibernate settings. -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="use_sql_comments">true</property>

        <!-- DDL Mode. -->
        <property name="hbm2ddl.auto">validate</property>

        <!-- 2nd Level Cache. -->
        <property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property>

        <!-- All our Hibernate mapping XML files. -->
        <mapping class="net.myapp.common.dto.WordDTO" />
    </session-factory>
</hibernate-configuration>

Из вывода журнала меня беспокоит несколько вещей:

  1. Настроенная SessionFactory: ноль
  2. Использование встроенного пула соединений Hibernate (не для производственного использования!)
  3. В свойстве hibernate.connection.driver_class не указан класс драйвера JDBC.
  4. Режим автофиксации: false

Он действительно видит, что размер моего пула соединений равен 1, но я беспокоюсь, что это значение по умолчанию, к которому прибегает Hibernate, когда не может найти/разобрать файл hibernate.cfg.xml. Почему моя SessionFactory пуста? Почему Hibernate использует собственный встроенный пул соединений? Почему он не может найти мой класс драйвера JDBC, когда h2-1.3.173.jar находится в пути к классу? Что такое «режим автоматической фиксации» и почему он неверен?

Заранее спасибо!


person Community    schedule 11.10.2013    source источник
comment
Убедитесь, что xml успешно получен в классах. Вы уверены, что это скопировано? Он помещается в корень?   -  person StanislavL    schedule 11.10.2013
comment
Спасибо @StanislavL (+1) - я запускаю это из Eclipse, где hibernate.cfg.xml находится в исходном каталоге src/main/config...   -  person    schedule 11.10.2013


Ответы (1)


1) Нуль - это просто имя фабрики сеансов. Называть не надо.

2) Вы захотите использовать что-то вроде c3p0. Взгляните на https://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool. Если вы установите эти настройки, он включит c3p0.

3) Вы устанавливаете driver.class, но это driver_class

4) Autocommit false означает, что вам нужно будет вручную зафиксировать транзакции. Это нормальный шаблон.

person David Weinberg    schedule 11.10.2013