【问题标题】:resources/hibernate.cfg.xml not found找不到资源/hibernate.cfg.xml
【发布时间】:2014-07-26 18:41:15
【问题描述】:

我正在学习在我的 Java Web 应用程序中使用 Hibernate。我有以下 sessionFactory 以配置我的 hibernate.cfg.xml 文件的位置开始,但它仍然抱怨:resources/hibernate.cfg.xml not found

“resources”文件夹是我在java项目中“src”文件夹的子目录。

public class HibernateUtil
{
    private static final SessionFactory sessionFactory = new Configuration().configure("resources/hibernate.cfg.xml").buildSessionFactory();

    public static void main(String[] args)
    {
        Session session = sessionFactory.getCurrentSession();
        Transaction tx = session.beginTransaction();

        Book book1 = new Book("John Wright", "Unknown Title");
        session.save(book1);
        tx.commit();

        System.out.println("Book committed: book title: " + book1.getTitle() + ", author is: " + book1.getAuthor());
        sessionFactory.close();
    }


}

我在 pom.xml 中使用的休眠依赖项如下,但 intelliJ 通过突出显示“删除线”警告 buildSessionFactory() 方法已弃用

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.5.Final</version>
        </dependency>

我也在最底部发布来自我的 i 的错误消息。出了什么问题?谢谢

10:43:12.737 [main] INFO  o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
10:43:12.746 [main] INFO  org.hibernate.Version - HHH000412: Hibernate Core {4.3.1.Final}
10:43:12.747 [main] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
10:43:12.749 [main] INFO  org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
Exception in thread "main" java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:259)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:116)
Caused by: org.hibernate.HibernateException: resources/hibernate.cfg.xml not found
    at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173)
    at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2093)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2074)
    at persistence.HibernateUtil.<clinit>(HibernateUtil.java:14)
    ... 3 more
10:43:12.763 [main] INFO  org.hibernate.cfg.Configuration - HHH000043: Configuring from resource: resources/hibernate.cfg.xml
10:43:12.763 [main] INFO  org.hibernate.cfg.Configuration - HHH000040: Configuration resource: resources/hibernate.cfg.xml

Process finished with exit code 1

【问题讨论】:

  • 只是为了确保 hibernate.cfg.xml 在 src/main/resources 中? Maven 的项目结构非常特别...
  • 不,它是 src/resources,但即使我将资源移动到 src/main,同样的错误仍然存​​在
  • 您是否设置了 Maven 以将其包含在最终构建中?通常,Maven 为所有 java 文件提供 src/main/java,为所有其他文件提供 src/main/resources。有了这种结构,Maven 会自动知道所有东西在哪里以及它们都需要包含在内。此外,如果您将其放在 src/main/resources 中,则不会将其指定为 .configure("resources/hibernate.cfg.xml") 而是指定为 .configure("hibernate.cfg.xml") 除非您创建文件夹在资源文件夹下。
  • 仍然不能使用 .configure("hibernate.cfg.xml"),谢谢
  • 即使在将文件移动到 src/main/resources 之后?

标签: java hibernate configuration persistence


【解决方案1】:

找不到您的休眠配置文件,因为当 webapp 启动时它不在类路径的根目录中...

当您使用 Maven 时,将 hibernate.cfg.xml 文件放在 src/main/resources 文件夹中应该会导致它自动复制到 WAR 文件中的 WEB-INF/classes 中。打开您的 WAR 文件并查看 hibernate.cfg.xml 的放置位置。

如果 hibernate.cfg.xml 文件不在您的 WAR 文件中...请仔细检查您的 POM 中的 maven-war-plugin 设置。

关于弃用警告,根据4.3 documentation,buildSessionFactory() 已被弃用,您应该改用 buildSessionFactory(ServiceRegistry)。

【讨论】:

    【解决方案2】:

    谢谢大家的回复。

    终于,我想通了。下面是我在 HibernateUtil 类中的配置。因为我使用的是 Hibernate 4.3.5,所以我用最新的方法替换了不推荐使用的方法。我还把我的 hibernate.cfg.xml 移到了src/main/java/resources

    static {
            try {
                Configuration configuration = new Configuration().configure("/resources/hibernate.cfg.xml");
                StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
                sessionFactory = configuration.buildSessionFactory(builder.build());
            } catch (HibernateException ex) {
                System.err.println("Initial sessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2016-06-14
      • 2016-12-02
      • 1970-01-01
      • 2021-07-18
      相关资源
      最近更新 更多