別のディレクトリからhibernate.cfg.xmlをロードする方法
Hibernate XML構成ファイル「hibernate.cfg.xml
」は、パッケージの外部で、常にプロジェクトのクラスパスのルートに配置されます。 この構成ファイルを別のディレクトリに配置すると、次のエラーが発生する場合があります。
Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found Exception in thread "main" java.lang.ExceptionInInitializerError at com.example.persistence.HibernateUtil.buildSessionFactory(HibernateUtil.java:25) at com.example.persistence.HibernateUtil.(HibernateUtil.java:8) at com.example.common.App.main(App.java:11) Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:147) at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1405) at org.hibernate.cfg.Configuration.configure(Configuration.java:1427) at org.hibernate.cfg.Configuration.configure(Configuration.java:1414) at com.example.persistence.HibernateUtil.buildSessionFactory(HibernateUtil.java:13) ... 2 more
Hibernateに他のディレクトリで「hibernate.cfg.xml
」ファイルを探すように依頼するには、「hibernate.cfg.xml
」ファイルパスを引数としてconfigure()に渡すことにより、デフォルトのHibernateのSessionFactory
クラスを変更できます。 )sメソッド:
SessionFactory sessionFactory = new Configuration() .configure("/com/example/persistence/hibernate.cfg.xml") .buildSessionFactory(); return sessionFactory;
HibernateUtil.java
ディレクトリ「/com/example/persistence/」から「hibernate.cfg.xml
」をロードするためのHibernateUtil.java
の完全な例。
import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { // load from different directory SessionFactory sessionFactory = new Configuration().configure( "/com/example/persistence/hibernate.cfg.xml") .buildSessionFactory(); return sessionFactory; } 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(); } }
完了しました。