【问题标题】:How to resolve /hibernate.cfg.xml not found exception when Session factory create?创建会话工厂时如何解决 /hibernate.cfg.xml 未找到异常?
【发布时间】:2016-12-12 09:51:58
【问题描述】:

我正在开发一个 JBoss fuse 项目,我能够解决与 JBoss fuse 6.3 版本上的 hibernate 集成相关的大部分依赖问题。但不幸的是,当程序尝试创建休眠会话时,它会给出以下异常,说它无法找到/hibernate.cfg.xml 文件。下图显示了我的项目结构。项目包含资源文件夹中的 hibernate.cfg.xml 文件。

异常点应用尝试创建会话

      JBossFuse:karaf@root> SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found

整个异常类似于下面。

Caused by: java.lang.ExceptionInInitializerError
at com.demo.activemq.HibernateUtil.buildSessionFactory(HibernateUtil.java:17)[388:DemoActiveMq1:1.0.0.SNAPSHOT]
at com.demo.activemq.HibernateUtil.<clinit>(HibernateUtil.java:8)[388:DemoActiveMq1:1.0.0.SNAPSHOT]
at com.demo.activemq.OrderProcessor.process(OrderProcessor.java:18)[388:DemoActiveMq1:1.0.0.SNAPSHOT]
at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
... 45 more
Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found
at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173)[346:org.hibernate.core:4.2.22.Final-redhat-1]
at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2090)[346:org.hibernate.core:4.2.22.Final-redhat-1]
at org.hibernate.cfg.Configuration.configure(Configuration.java:2071)[346:org.hibernate.core:4.2.22.Final-redhat-1]
at org.hibernate.cfg.Configuration.configure(Configuration.java:2051)[346:org.hibernate.core:4.2.22.Final-redhat-1]
at com.demo.activemq.HibernateUtil.buildSessionFactory(HibernateUtil.java:13)[388:DemoActiveMq1:1.0.0.SNAPSHOT]
... 48 more

下面是我的 HibernateUtil.java 内容,这是该文件的第 13 行 return new Configuration().configure().buildSessionFactory();

package com.demo.activemq;


import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    try {
        // Create the SessionFactory from hibernate.cfg.xml
        return new Configuration().configure().buildSessionFactory();
    } catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        System.err.println("SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

public static void shutdown() {
    // Close caches and connection pools
    getSessionFactory().close();
}

}

以下是我的 pom.xml 文件的依赖项。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-core</artifactId>
  <version>2.17.0.redhat-630187</version>
</dependency>
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-spring</artifactId>
  <version>2.17.0.redhat-630187</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-test-spring</artifactId>
  <version>2.17.0.redhat-630187</version>
</dependency>
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-core</artifactId>
  <version>3.1.8</version>
</dependency>
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-api</artifactId>
  <version>2.7.11</version>
</dependency>
    <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.2.22.Final-redhat-1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.14</version>
</dependency>
<dependency>
  <groupId>org.apache.servicemix.bundles</groupId>
  <artifactId>org.apache.servicemix.bundles.commons-dbcp</artifactId>
  <version>1.4_3</version>
</dependency>

有没有人遇到过这种问题?我该如何解决这个问题?请善意提供有关此问题的反馈

【问题讨论】:

  • 你好。首先,你有hibernate.cfg.xml 文件吗?如果你这样做了,hibernate.cfg.xml 在你的项目中位于哪里?
  • 我已将其添加到 src/main/resources 文件夹中。我已经用项目结构更新了问题。
  • 通过提供cfg文件的完整路径来试试这个,Configuration().configure("./com/eclear/cfg/xml/hibernate.cfg.xml").buildSessionFactory();

标签: java hibernate jbossfuse


【解决方案1】:

不推荐使用没有任何方法参数的new Configuration().configure().buildSessionFactory(),因此您会遇到异常。

请修改你的buildSessionFactory()方法如下:

private static SessionFactory buildSessionFactory() {
    try {
        // Create the SessionFactory from hibernate.cfg.xml
        Configuration configure = new Configuration();
        return configure.buildSessionFactory(new StandardServiceRegisteryBuilder
                                  .applySettings(configure.getProperties())
                                  .build());
    } catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        System.err.println("SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

如果遇到任何问题,请在 cmets 中告诉我。

【讨论】:

  • 我得到一个编译错误说找不到“StandardServiceRegisteryBuilder”是否需要额外的罐子?
  • 您添加了哪些罐子,请问您可以使用 pom.xml 文件编辑问题吗?
  • 你使用的是哪个版本的休眠?
  • 你的休眠版本应该是4.3以上的4.x
  • 我使用的是 4.2.22.Final-redhat-1 版本,因为它应该与 JBoss fuse 版本匹配。我已经添加了有问题的依赖项。
【解决方案2】:

Hibernate 4.x 介绍了ServiceRegistry。您的代码遵循Hibernate 3.x 标准。 new Configuration().configure().buildSessionFactory()Hibernate 3.x 中有效。由于您使用的是Hibernate 4.xhibernate.cfg.xml,因此您创建SessionFactory 的代码应该是这样的:

Configuration config = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
              .applySettings(config.getProperties()).build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);

因为,如果您在 Hibernate 文档中查看 Configuration 类中的 configure() 方法,它会说:

使用应用程序资源中指定的映射和属性 命名为 hibernate.cfg.xml。

如果您使用的是hibernate.properties 文件,则创建configuration 对象的代码应如下所示:

Configuration config = new Configuration();

【讨论】:

    猜你喜欢
    • 2020-01-07
    • 1970-01-01
    • 2013-02-21
    • 2016-02-04
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多