【问题标题】:how to fix the error: "INFO: HHH000206: hibernate.properties not found"?如何修复错误:“INFO:HHH000206:找不到hibernate.properties”?
【发布时间】:2013-09-30 02:57:45
【问题描述】:

我尝试测试休眠配置是否正常工作。我试过了,但我得到了一个错误:

INFO: HHH000206: hibernate.properties not found

为此:我创建:

[1]休眠配置文件[使用xml]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory name="">
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.default_schema">explorecalifornia</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.connection.password">abc123</property>
 </session-factory>
</hibernate-configuration>

[2] 一个休眠实用程序类

public class HibernateUtilities {

    private static SessionFactory sessionFactory;
    private static ServiceRegistry serviceRegistry;

    static{
        try{
            Configuration configuration = new Configuration().configure();

            serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        }

        catch(HibernateException exception){
            System.out.println("Problem creating session factory");
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void setSessionFactory(SessionFactory sessionFactory) {
        HibernateUtilities.sessionFactory = sessionFactory;
    }


}

[3]主程序:

import org.hibernate.Session;

    public class Program {

        public static void main(String[] args) {
            System.out.println("Hibernate");

            Session session = HibernateUtilities.getSessionFactory().openSession();
            session.close();

        }

    }

但是当我运行程序时,我得到了以下东西:

Hibernate
Sep 29, 2013 10:47:15 PM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
Sep 29, 2013 10:47:15 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.2.5.Final}
Sep 29, 2013 10:47:15 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Sep 29, 2013 10:47:15 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Sep 29, 2013 10:47:15 PM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
Sep 29, 2013 10:47:15 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
Problem creating session factory
Exception in thread "main" java.lang.NullPointerException
    at com.simpleprogrammer.Program.main(Program.java:10)

为了解决这个问题,我尝试了 Google 并应用了我找到的方法。但我仍然无法解决问题。有人可以帮帮我吗?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    您的问题是为您的应用程序创建会话工厂,它发生在 HibernateUtilities 类中,原因可能是,您无法通过 sessionRegistry 创建会话工厂,通过休眠配置类创建它,因为你在hibernate.cfg.xml注册了你的配置

    只需替换 HibernateUtilities 类中的以下代码

            `sessionFactory = configuration.buildSessionFactory(serviceRegistry);`
    

            `sessionFactory = configuration.buildSessionFactory();`
    

    【讨论】:

    • 我替换了那行代码。当我运行程序时,我得到了同样的错误。 "INFO: HHH000206: hibernate.properties not found"
    • 只需删除serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();UtilitiesClass 中的行serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();,因为在该部分中只有您的打击和获得异常,而您的所有其他配置都很好
    • 我刚试了你的程序,它工作正常,你是否在控制台配置中设置了properties file,如果是,你将它们放在哪里。
    • 不,我不设置/使用任何属性文件。此外,我只使用以下 jar 来执行此操作: antlr-2.7.7.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.2.Final.jar hibernate-core-4.2.5.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar javassist-3.15.0-GA.jar jboss-logging-3.1.0.GA.jar jboss-transaction-api_1.1_spec-1.0.1.Final.jar mysql-connector-java-5.0.8-bin.jar
    【解决方案2】:

    这只是一条 INFO 消息,告诉您没有hibernate.properties 文件。此属性文件不是强制性的,因此不会阻止您的应用程序运行。

    如果您想知道导致SessionFactory 创建失败的原因,您需要将您的catch 块更改为:

    catch(HibernateException exception){
         System.out.println("Problem creating session factory");
         exception.printStackTrace();
    }
    

    您应该改用日志框架。

    【讨论】:

      【解决方案3】:

      就我而言,我在 tomcat 上运行带有 JPA 注释的 Hibernate 5,当我更改为 glassfish 4.1

      时停止工作

      错误:

      找不到hibernate.properties

      确保: src/main/resources/hibernate.cfg.xml 存在

      如果你只有 hibernate-core 的依赖,我使用的是 hibernate-annotations 和 hibernate-common-annotations 并且它会产生冲突。 hibernate 5不需要这两个,我在某处读过。尝试删除;)

      之后出现新的错误:

      java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V

      原因是最旧的 jboss-logging.jar 位于:“YOUR_GLASSFISH_FOLDER/glassfish/modules”

      为什么? hibernate 5 依赖于最新版本的 jboss-logging,而 glassfish 4 使用最旧的版本,即使您在 POM 文件中声明了最新版本。实际上我正在使用:

      org.jboss.logging jboss-logging 3.3.0.Final
      

      然后我下载它并替换模块路径中的旧 .jar 并恢复工作,我花了 2 天时间试图解决这个问题,我希望它对未来的一些问题有所帮助 =D

      我使用此链接来帮助我:https://medium.com/@mertcal/using-hibernate-5-on-payara-cc242212a5d6#.npq2hdprz

      就我而言,另一种解决方案可能会回到上一个 Hibernate 4 版本(4.3.11.Final),但在我看来它已经太旧了

      【讨论】:

        【解决方案4】:

        配置文件必须放在类路径中。确保 hibernate.cfg.xml 在类路径中。由于您的程序是控制台程序,您需要将该 hibernate.cfg.xml 放在 src 文件夹中。如果您将其放在其他文件夹中,而不是在 Confingure.configure(fileName); 中指定它 正如 Mr.Kark 所回答的那样,您必须删除以下几行

        serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

        【讨论】:

          【解决方案5】:

          我认为您缺少一些休眠库(我猜可能是hibernate-tools.jar)。所以请检查一下。

          不管怎样,我看到你使用了 hibernate 注释,所以请试试这段代码,看看找不到错误属性会发生什么。

          try {
                  AnnotationConfiguration configuration = new AnnotationConfiguration();          
                  sessionFactory = configuration.configure().buildSessionFactory();       
              }
          

          【讨论】:

            【解决方案6】:

            session-factory 是休眠中的一个特殊标签,它没有任何名称,所以, 您可以将代码 session-factory name="" 更改为 session-factory 并尝试运行。

            【讨论】:

            • 您能告诉我如何将会话添加到 application.properties 中吗?
            【解决方案7】:

            你可以试试

            1. 确保文件 hibernate.cfg.xml 位于 src/main/resource
            2. 添加 pom.xml

            <!-- API, java.xml.bind module -->
              <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>2.3.2</version>
              </dependency>
            
            <!-- Runtime, com.sun.xml.bind module -->
            <dependency>
              <groupId>org.glassfish.jaxb</groupId>
              <artifactId>jaxb-runtime</artifactId>
              <version>2.3.2</version>
            </dependency>
            它对我有用

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-10-08
              • 1970-01-01
              • 2020-07-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多