Java 如何修复该错误:“quot;信息:hh000206:hibernate.properties未找到;?

Java 如何修复该错误:“quot;信息:hh000206:hibernate.properties未找到;?,java,hibernate,Java,Hibernate,我试图测试hibernate配置是否正常工作。我试过了,但出现了一个错误: INFO: HHH000206: hibernate.properties not found 为此,我创建: [1] hibernate配置文件[使用xml] <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD

我试图测试hibernate配置是否正常工作。我试过了,但出现了一个错误:

INFO: HHH000206: hibernate.properties not found
为此,我创建:

[1] hibernate配置文件[使用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>
[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)
Hibernate
2013年9月29日晚上10:47:15 org.hibernate.annotations.common.Version
信息:HCANN000001:Hibernate Commons注释{4.0.2.Final}
2013年9月29日10:47:15 PM org.hibernate.Version日志版本
信息:hh000412:Hibernate核心{4.2.5.Final}
2013年9月29日晚上10:47:15 org.hibernate.cfg.Environment
信息:HH000206:找不到hibernate.properties
2013年9月29日晚上10:47:15 org.hibernate.cfg.Environment buildBytecodeProvider
信息:HH000021:字节码提供程序名称:javassist
2013年9月29日10:47:15 PM org.hibernate.cfg.Configuration
信息:HH000043:从资源配置:/hibernate.cfg.xml
2013年9月29日10:47:15 PM org.hibernate.cfg.Configuration getConfigurationInputStream
信息:hh000040:配置资源:/hibernate.cfg.xml
创建会话工厂时出现问题
线程“main”java.lang.NullPointerException中出现异常
位于com.simpleprogrammer.Program.main(Program.java:10)

为了解决这个问题,我尝试了谷歌并应用了我发现的方法。但我仍然无法解决这个问题。有人能帮我吗?

您的问题是创建会话工厂对于您的应用程序,它发生在
hibernate属性
类中,原因可能是,您无法通过
会话注册表
通过hibernate配置类创建会话工厂,因为您在
hibernate.cfg.xml

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

        `sessionFactory = configuration.buildSessionFactory(serviceRegistry);`


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


serviceRegistry=newserviceregistrybuilder().applySettings(configuration.getProperties()).buildServiceRegistry()

我认为您缺少了一些hibernate库(我想可能是
hibernate tools.jar
吧)。所以请检查一下

无论如何,我看到您在使用hibernate注释,所以请尝试这段代码,看看在找不到错误属性的情况下会发生什么

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

这只是一条信息消息,告诉您没有
hibernate.properties
文件。此属性文件不是必需的,因此它不是阻止应用程序工作的因素

如果您想知道是什么导致了
SessionFactory
创建失败,您需要将catch块更改为:

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

您应该使用日志框架。

在我的例子中,我在tomcat上运行带有JPA注释的Hibernate 5,当我更改为glassfish 4.1时停止工作

错误:

hibernate.properties未找到

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

如果您只有hibernate核心的依赖项,那么我使用的是hibernate注释和hibernate公共注释,这会产生冲突。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日志的最新版本,而glassfish 4使用最旧版本,即使您在POM文件中声明了最新版本。实际上,我正在使用:

org.jboss.logging jboss-logging 3.3.0.Final
然后我下载了它,并在模块路径中替换了旧的.jar,然后它又重新工作了,我花了2天的时间试图解决这个问题,我希望它对将来的一些问题有所帮助

我使用此链接来帮助我:


另一个解决方案,在我的例子中,可以回到上一个Hibernate 4版本(4.3.11.Final),但在我看来它已经太旧了会话工厂是Hibernate中的一个特殊标记,它没有任何名称,
您可以将代码会话工厂名称=“更改为会话工厂,然后尝试运行

我替换了那行代码。当我运行程序时,我得到了相同的错误。“INFO:hh000206:hibernate.properties not found”只需删除行
serviceRegistry=new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry()
utilities类中
因为在这一部分中只有你的strucking和getting异常,而且你的所有其他配置都很好。我刚刚尝试了你的程序,它工作正常,你是否在控制台配置中设置了
properties文件
,如果是,你将它们放在了哪里。否我没有设置/使用任何属性文件。此外我只使用以下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.1_spec-1.0.1.1.1.1.1.1.Final.jar-mysql-connector-java-5.0.0.8-bin请告诉我如何将会话添加到application.properties?
catch(HibernateException exception){
     System.out.println("Problem creating session factory");
     exception.printStackTrace();
}
org.jboss.logging jboss-logging 3.3.0.Final