Domanda

I am using Hibernate (4.2.3) in a project for the first time. I am trying to get it to connect to an H2 embedded (local) DB and have the h2-1.3.173.jar on the classpath as well as all the Hibernate JARs. I'm getting some disturbing error messages from Hibernate in my log output that make me wonder if I am not configuring Hibernate correctly. Here is the output I'm seeing in the logs:

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

And here is my hibernate.cfg.xml file:

<?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>

From the log output, I am concerned about several things:

  1. Configured SessionFactory: null
  2. Using Hibernate built-in connection pool (not for production use!)
  3. No JDBC Driver class was specified by property hibernate.connection.driver_class
  4. Autocommit mode: false

It does see that my connection pool size is 1, but I'm worried that this is a default value that Hibernate resorts to when it can't find/parse a hibernate.cfg.xml file. Why is my SessionFactory null? Why is Hibernate using it's own built-in connection pool? Why can't it find my JDBC Driver class when h2-1.3.173.jar is on the class path? What is "Autocommit mode" and why is it false?

Thanks in advance!

È stato utile?

Soluzione

1) The null is just the name of the session factory. Naming it is not necessary.

2) You will want to use something like c3p0. Take a look at https://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool. If you set those settings, it will turn on c3p0.

3) You are setting driver.class but it's driver_class

4) Autocommit false means you will need to manually commit your transactions. This is the normal pattern.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top