简体   繁体   English

我正确配置Hibernate hibernate.cfg.xml文件吗?

[英]Am I configuring Hibernate hibernate.cfg.xml file correctly?

I am using Hibernate (4.2.3) in a project for the first time. 我是第一次在项目中使用Hibernate(4.2.3)。 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. 我试图让它连接到H2嵌入式(本地)数据库,并在类路径上拥有h2-1.3.173.jar以及所有Hibernate JAR。 I'm getting some disturbing error messages from Hibernate in my log output that make me wonder if I am not configuring Hibernate correctly. 我在日志输出中收到来自Hibernate的一些令人不安的错误消息,这让我想知道我是不是正确配置了Hibernate。 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: 这是我的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>

From the log output, I am concerned about several things: 从日志输出中,我关注几件事:

  1. Configured SessionFactory: null 配置的SessionFactory:null
  2. Using Hibernate built-in connection pool (not for production use!) 使用Hibernate内置连接池(不供生产使用!)
  3. No JDBC Driver class was specified by property hibernate.connection.driver_class 属性hibernate.connection.driver_class没有指定JDBC Driver类
  4. Autocommit mode: false 自动提交模式: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. 确实看到我的连接池大小为1,但我担心这是Hibernate在无法找到/解析hibernate.cfg.xml文件时所采用的默认值。 Why is my SessionFactory null? 为什么我的SessionFactory为null? Why is Hibernate using it's own built-in connection pool? 为什么Hibernate使用它自己的内置连接池? Why can't it find my JDBC Driver class when h2-1.3.173.jar is on the class path? h2-1.3.173.jar在类路径上时,为什么不能找到我的JDBC Driver类? What is "Autocommit mode" and why is it false? 什么是“自动提交模式”,为什么它是假的?

Thanks in advance! 提前致谢!

1) The null is just the name of the session factory. 1)null只是会话工厂的名称。 Naming it is not necessary. 命名它没有必要。

2) You will want to use something like c3p0. 2)你会想要使用类似c3p0的东西。 Take a look at https://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool . 请查看https://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool If you set those settings, it will turn on c3p0. 如果您设置这些设置,它将打开c3p0。

3) You are setting driver.class but it's driver_class 3)您正在设置driver.class但它是driver_class

4) Autocommit false means you will need to manually commit your transactions. 4)Autocommit false表示您需要手动提交事务。 This is the normal pattern. 这是正常模式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM