项目中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的另一个原因是,如果您在Configuration
或AnnotatedConfiguration
对象上调用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
。