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

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

在此处输入图像描述

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”中的exceptionjava.lang.ExceptionInInitializerError at logic.HibernateUtil.buildSessionFactory (HibernateUtil.java:19)在logic.HibernateUtil。(HibernateUtil.java:9)处于logic.Main.main(Main.java:12)引起:org.hibernate.HibernateException:C:\ Users \ Nikolay_Tkachev \ workspace \在org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1947)的org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173)中找不到hiberTest \ src \ logic \ hibernate.cfg.xml在logic.HibernateUtil.buildSessionFactory(HibernateUtil.java:14)的org.hibernate.cfg.Configuration.configure(Configuration.java:1928)… 2更多

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

提供相对于项目的路径。

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

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

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

不知何故放在“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中有这段代码

   

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

编辑:

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

以上结构有效。

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

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

这是自定义文件夹结构的一个现实例子:文件夹结构,并初始化类HibernateUtil

在此处输入图像描述

有:

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

制图: 在此处输入图像描述

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

  org.hibernate.dialect.MySQLDialect true       

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

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

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

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

发生此exception的另一个原因是,如果您在ConfigurationAnnotatedConfiguration对象上调用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里面。

我的问题是我在resorces文件夹中有一个令人厌恶的模式。 删除它后

 config.configure(); 

为我工作。 用src / java / …结构的src /资源下的HibernateUtil.java和cfg文件。

使用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”。 代码belove对我有用。 在hibernate-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; } } 

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

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

然后检查resources文件夹并单击Apply。

然后使用:

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

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