hibernate.cfg.xml在项目中的位置?

问题描述 投票:0回答:11

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

enter image description here

HibernateUtil:

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 在线程“main”中未找到异常 java.lang.ExceptionInInitializerError 位于 logic.HibernateUtil.buildSessionFactory(HibernateUtil.java:19) 在 逻辑.HibernateUtil.(HibernateUtil.java:9) 在 logic.Main.main(Main.java:12) 原因: org.hibernate.HibernateException: C:\Users\Nikolay_Tkachev\workspace\hiberTest\src\logic\hibernate.cfg.xml 未找到于 org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173) 在 org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1947) 在org.hibernate.cfg.Configuration.configure(Configuration.java:1928) 在logic.HibernateUtil.buildSessionFactory(HibernateUtil.java:14) ...还有2个

错误原因是什么以及如何修复?

java hibernate orm
11个回答
35
投票

给出与您的项目相关的路径。

在您的

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();

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


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

以上结构有效。


4
投票

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

Configuration configuration = new Configuration();          
sessionFactory =configuration.configure().buildSessionFactory();

4
投票

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

HibernateUtil


enter image description here

与:

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

映射: enter image description here


带有自定义实体映射文件:

        <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();


3
投票

对于任何感兴趣的人:如果您正在使用Intellj,只需将

hibernate.cfg.xml
放在
src/main/resources
下即可。


2
投票

尝试下面的代码它将解决您的问题。

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

2
投票

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

config.configure(); 

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


1
投票

发生此异常的另一个原因是,如果您对

Configuration
AnnotatedConfiguration
对象调用两次配置方法,如下所示 -

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 内部。


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");

P.S:我的 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;
}
}  

0
投票

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

您可以通过转到“配置构建路径”,然后单击“将文件夹添加到源选项卡”来完成此操作。

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

然后只需使用:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

0
投票

专门针对 VS 代码 正如其他人已经回答了这个问题,但如果上述解决方案不适合您,那么您想添加一件常见的事情,方法是在 IDE 中移动 hibernate.cfg.xml 文件,然后您可以显示您的资源管理器并手动将此文件放在正确的地方。

#vscode

© www.soinside.com 2019 - 2024. All rights reserved.