【问题标题】:Hibernate configuration休眠配置
【发布时间】:2010-11-08 00:31:54
【问题描述】:

我正在尝试开始使用 Hibernate,但在执行我的程序时,我在初始化期间遇到错误。 异常是这个类抛出的,复制自here

package net.always_data.bastien_leonard;

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("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}

这是堆栈跟踪:

> java net/always_data/bastien_leonard/Main
Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
Exception in thread "main" java.lang.ExceptionInInitializerError
    at net.always_data.bastien_leonard.HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
    at net.always_data.bastien_leonard.HibernateUtil.<clinit>(HibernateUtil.java:8)
    at net.always_data.bastien_leonard.Main.main(Main.java:17)
Caused by: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
    at net.always_data.bastien_leonard.HibernateUtil.buildSessionFactory(HibernateUtil.java:13)
    ... 2 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.Configuration
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
    ... 3 more

我不知道问题出在哪里,所以我真的不知道在哪里看:

  • 安装问题?这是由 Maven 处理的,所以我猜它是正确的。
  • Hibernate 找不到配置文件?
  • 类路径问题?

我正在从包含我的 hibernate.cfg.xml 文件的类路径的根目录调用程序。 以下是它在实践中的样子:

> pwd
/home/bastien/info/java/hibernate/test/Test/target/classes
> echo $CLASSPATH
/home/bastien/info/java/hibernate/test/Test/target/classes
> ls -F
hibernate.cfg.xml  net/
> ls -FR
.:
hibernate.cfg.xml  net/

./net:
always_data/

./net/always_data:
bastien_leonard/

./net/always_data/bastien_leonard:
Event.class  Event.hbm.xml  HibernateUtil.class  Main.class

我尝试查看 Hibernate 提供的教程示例,但 Maven 无法编译它们;它抱怨缺少工件。

顺便说一句,Maven 只允许我使用 Hibernate 3.3.1。是否可以使用 3.3.2 并且仍然让 Maven 处理安装?

【问题讨论】:

    标签: java hibernate configuration persistence


    【解决方案1】:

    “java.lang.NoClassDefFoundError”,表示类加载器找不到org.hibernate.cfg.Configuration说你有CLASSPATH问题。

    回显 $CLASSPATH /home/bastien/info/java/hibernate/test/Test/target/classes

    您还必须将所有 Hibernate JAR 和依赖项添加到 CLASSPATH 中。我没有在这个回声中看到它们。

    【讨论】:

    • 呃,我在想 Maven 会自动处理这个问题。有没有一些简单的方法可以自动执行此操作?
    • 告诉 Maven 你想要 CLASSPATH 中的依赖项:maven.apache.org/shared/maven-archiver/examples/classpath.html
    • 谢谢。现在我试图将所有依赖的 jar 放入与我的 jar 相同的目录中,但我总是有一个带有 org/slf4j/impl/StaticLoggerBinder 的 NoClassDefFoundError,尽管我已将 Maven 下载的所有 slf4j jar 放入当前目录。有什么想法吗?
    • 为什么不忘记 Maven 看看你是否可以在没有它的情况下构建?只需编写一个脚本、使用 Ant 或您的 IDE,无需 Maven。建造应该没有那么困难。如果该工具没有帮助,而且我认为 Maven 没有帮助,请不要使用它。
    • 这就是我通常所做的,但我想避免在每个项目中复制依赖的 JAR——理想情况下,我会在标准位置安装它们一次,并在每个项目中引用它们。无论如何,我是从头开始使用 Ant 的,现在这个例子可以工作了(虽然很痛苦)。感谢您的帮助!
    猜你喜欢
    • 2015-07-28
    • 2016-05-06
    • 2018-10-21
    • 2012-11-19
    • 2011-01-05
    • 2010-12-26
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多