Расположение 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();