Расположение hibernate.cfg.xml в проекте?
Я создал проект со следующей структурой:
![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\рабочей\hiberTest\SRC\логика\hibernate.cfg.xml не найдено Исключение в потоке "main" java.lang.ExceptionInInitializerError at logic.HibernateUtil.buildSessionFactory(HibernateUtil.java:19) в logic.HibernateUtil. (HibernateUtil.java:9) at logic.Main.main(Main.java:12) Вызвано: org.hibernate.HibernateException: C:\Users\Nikolay_Tkachev\рабочей\hiberTest\SRC\логика\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) в логике .HibernateUtil.buildSessionFactory(HibernateUtil.java:14) ... еще 2
В чем причина ошибки и как ее исправить?
Ответы
Ответ 1
Дайте путь относительно вашего проекта.
Создайте папку 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();
Но он не удался после развертывания на сервере, поскольку вы используете системный путь, чем относительный путь проекта.
Ответ 2
Как-то размещение в папке "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 в разделе:
EDIT:
[Project Folder]/src/main/resources/hibernate/Address.hbm.xml
[Project Folder]/src/main/resources/hibernate/Person.hbm.xml
Работа над надстройкой.
Ответ 3
Вы можете поместить файл "hibernate.cfg.xml" в папку src (src\hibernate.cfg.xml), а затем запустите конфигурацию как код ниже:
Configuration configuration = new Configuration();
sessionFactory =configuration.configure().buildSessionFactory();
Ответ 4
попробуйте под кодом, он решит вашу проблему.
Configuration configuration = new Configuration().configure("/logic/hibernate.cfg.xml");
Ответ 5
Это пример реальности при настройке структуры папок:
Структура папки и инициализировать класс 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
, когда build sessionFactory, только:
return new Configuration().configure().buildSessionFactory();
)
Ответ 6
Другая причина, по которой возникает это исключение, - это дважды вызвать метод configure на объекте Configuration
или AnnotatedConfiguration
, например this -
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");
Btw, эта структура проекта находится внутри затмения.
Ответ 7
Моя проблема заключалась в том, что у меня был исправляющий патерн в папке resorces.
После удаления его
config.configure();
работал у меня. Со структурой
src/java/... HibernateUtil.java и cfg файл под src/resources.
Ответ 8
Использование метода 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;
}
}
Ответ 9
В случае проекта Maven создайте папку с именем resources в src/main folder и добавьте папку ресурсов в качестве исходной папки в вашем пути к классам.
Это можно сделать, выбрав "Настроить путь сборки" и затем "Добавить папку" на вкладку "Источники".
Затем проверьте папку ресурсов и нажмите "Применить".
Затем просто используйте:
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();