23

我创建了一个具有以下结构的项目:

在此处输入图像描述

休眠实用程序:

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            Configuration  configuration = new Configuration().configure( "C:\\Users\\Nikolay_Tkachev\\workspace\\hiberTest\\src\\logic\\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;
    }

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

}

在线

Configuration  configuration = new Configuration().configure( "C:\\Users\\Nikolay_Tkachev\\workspace\\hiberTest\\src\\logic\\hibernate.cfg.xml");

我有错误

初始 SessionFactory 创建 failed.org.hibernate.HibernateException: C:\Users\Nikolay_Tkachev\workspace\hiberTest\src\logic\hibernate.cfg.xml 在 logic.HibernateUtil.buildSessionFactory 的线程“main”java.lang.ExceptionInInitializerError 中找不到异常(HibernateUtil.java:19) 在 logic.HibernateUtil.(HibernateUtil.java:9) 在 logic.Main.main(Main.java:12) 引起:org.hibernate.HibernateException: C:\Users\Nikolay_Tkachev\workspace\ hiberTest\src\logic\hibernate.cfg.xml not found at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173) at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1947) at org.hibernate.cfg.Configuration.configure(Configuration.java:1928) 在 logic.HibernateUtil.buildSessionFactory(HibernateUtil.爪哇:14)... 2更多

错误的原因是什么,我该如何解决?

4

10 回答 10

34

提供相对于您的项目的路径。

创建一个名为resources您 的文件夹src 并将您的配置文件放在那里。

   configuration.configure("/resources/hibernate.cfg.xml");

如果你检查你的代码

Configuration  configuration = new Configuration().configure( "C:\\Users\\Nikolay_Tkachev\\workspace\\hiberTest\\src\\logic\\hibernate.cfg.xml");
return new Configuration().configure().buildSessionFactory();

在两行中,您将创建两个配置对象。

如果您写的话,那应该可以工作(尚未测试),

Configuration  configuration = new Configuration().configure( "C:\\Users\\Nikolay_Tkachev\\workspace\\hiberTest\\src\\logic\\hibernate.cfg.xml");
return  configuration.buildSessionFactory();

但是在服务器上部署后它会失败,因为您使用的是系统路径而不是项目相对路径。

于 2013-09-11T08:54:07.593 回答
13

不知何故,放在“src”文件夹下对我不起作用。

而是将 cfg.xml 放置如下:

[Project Folder]\src\main\resources\hibernate.cfg.xml

工作。使用此代码

new Configuration().configure().buildSessionFactory().openSession();

在一个文件中

    [Project Folder]/src/main/java/com/abc/xyz/filename.java

另外在 hibernate.cfg.xml 中有这段代码

<mapping resource="hibernate/Address.hbm.xml" />
<mapping resource="hibernate/Person.hbm.xml" />

将上面的 hbm.xml 文件放在:

编辑:

[Project Folder]/src/main/resources/hibernate/Address.hbm.xml
[Project Folder]/src/main/resources/hibernate/Person.hbm.xml

上述结构有效。

于 2013-12-29T04:16:58.970 回答
4

您可以将文件“hibernate.cfg.xml”放入 src 文件夹(src\hibernate.cfg.xml),然后按照以下代码初始化配置:

Configuration configuration = new Configuration();          
sessionFactory =configuration.configure().buildSessionFactory();
于 2013-09-11T08:55:49.387 回答
4

这是自定义文件夹结构时的实际示例:文件夹结构和初始化类HibernateUtil

在此处输入图像描述

和:

return new Configuration().configure("/config/hibernate.cfg.xml").buildSessionFactory();

映射: 在此处输入图像描述


使用自定义实体映射文件:

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <mapping class="com.vy.entities.Users"/>
        <mapping class="com.vy.entities.Post"/>
        <mapping resource="config/Users.hbm.xml"/>      
        <mapping resource="config/Post.hbm.xml"/>               
    </session-factory>
</hibernate-configuration>

(注意:最简单的方式,如果你按照默认方式,这意味着将所有xml配置文件放在src文件夹中,当构建sessionFactory时,只有:

return new Configuration().configure().buildSessionFactory();

)

于 2016-01-09T10:20:01.250 回答
3

对于任何感兴趣的人:如果您使用的是Intellj,只需简单地hibernate.cfg.xml放在src/main/resources.

于 2018-06-26T11:53:24.697 回答
2

试试下面的代码,它会解决你的问题。

Configuration  configuration = new Configuration().configure("/logic/hibernate.cfg.xml");
于 2013-09-13T09:08:31.487 回答
1

发生此异常的另一个原因是,如果您在这样的ConfigurationorAnnotatedConfiguration对象上调用 configure 方法两次 -

AnnotationConfiguration config = new AnnotationConfiguration();
config.addAnnotatedClass(MyClass.class);
//Use this if config files are in src folder
config.configure();
//Use this if config files are in a subfolder of src, such as "resources"
config.configure("/resources/hibernate.cfg.xml");

顺便说一句,这个项目结构在 eclipse 里面。

于 2014-04-24T21:53:13.623 回答
1

我的问题是我在资源文件夹中有一个排除模式。删除它后

config.configure(); 

为我工作。结构为 src/java/...HibernateUtil.java 和 src/resources 下的 cfg 文件。

于 2016-06-23T09:09:13.277 回答
0

两次使用 configure() 方法对我来说是负责的问题。而不是这样使用:

    Configuration configuration = new Configuration().configure();
    configuration.configure("/main/resources/hibernate.cfg.xml");

现在,我这样使用,问题不存在了。

    Configuration configuration = new Configuration();
    configuration.configure("/main/resources/hibernate.cfg.xml");

PS:我的 hibernate.cfg.xml 文件也位于“src/main/resources/hibernate.cfg.xml”。亲爱的代码对我有用。在休眠 5

public class HibernateUtil {

 private static SessionFactory sessionFactory ;


 static {
     try{
    Configuration configuration = new Configuration();
    configuration.configure("/main/resources/hibernate.cfg.xml");
    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
    sessionFactory = configuration.buildSessionFactory(builder.build());
 }
     catch(Exception e){
         e.printStackTrace();
     }
     }

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}
}  
于 2017-01-11T00:08:10.973 回答
0

如果是 Maven 项目,请在 src/main 文件夹下创建一个名为 resources 的文件夹,并将资源文件夹添加为类路径中的源文件夹。

您可以通过转到配置构建路径,然后单击将文件夹添加到源选项卡来做到这一点。

然后检查资源文件夹并单击应用。

然后只需使用:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
于 2017-04-24T08:31:42.593 回答