org.hibernate.HibernateException: /hibernate.cfg.xml не найден - PullRequest
10 голосов
/ 08 февраля 2011

Я пытаюсь использовать Hibernate с пружиной 3 MVC, но в данный момент я получаю это исключение. Я думаю, что мне нужно где-то определить мой hibernate.cfg.xml, но не знаю где?

Я в основном следовал этому примеру здесь http://www.nabeelalimemon.com/blog/2010/05/spring-3-integrated-with-hibernate-part-a/ И, в частности, видел эту строку кода там, которая предполагает "магическим образом" найти мой файл hibernate.cfg, используя это:

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

Я предполагаю, что это не правильно? в настоящее время у меня есть файл hibernate.cfg внутри src/com/jr/hibernate/

ниже мой файл cfg:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/racingleague</property>
    <property name="connection.username">username</property>
    <property name="connection.password">password</property>
    <property name="hibernate.format_sql">true</property>
    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>
    <!-- SQL dialect -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>
    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="hibernate.show_sql">true</property>
    <!-- Drop and re-create the database schema on startup -->
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!--property name="hbm2ddl.auto">update</property-->
    <mapping resource="com/jr/model/hibernateMappings/user.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

мой класс утилиты hibernate:

package com.jr.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {

     private static final SessionFactory sessionFactory = buildSessionFactory();

      public static SessionFactory buildSessionFactory() {
        try {
          // Create the SessionFactory from 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);
        }
      }

}

который получает название этого абстрактного класса:

package com.jr.db;

import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;

import com.jr.utils.HibernateUtils;

public abstract class DbWrapper<T> {

    private static SessionFactory sessionFactory = null;
    private static Session session;

    public DbWrapper() {
        setSessionFactory();
    }

    private void setSessionFactory() {
        sessionFactory = HibernateUtils.buildSessionFactory();
        session = sessionFactory.getCurrentSession();
    }

    public boolean addNewItem(T dbItem) {

        try {
            session.getTransaction().begin();
            session.save(dbItem);
            session.getTransaction().commit();
        } catch (Exception e) {
            System.err.println("error exception when adding new item to table"
                    + e);
        } finally {

            session.close();
            sessionFactory.close();
        }

        return false;

    }

    public abstract boolean removeItem(String uid);

    public abstract boolean modifyItem(String uid, T item);

}

А вот контроллер, который изначально выполняет некоторые функции гибернации:

private Logger logger = Logger.getLogger(UserController.class);

    private UserDb userDb;

@RequestMapping(value = "/user/registerSuccess", method = RequestMethod.POST)
public String submitRegisterForm(@Valid User user, BindingResult result) {

    // validate the data recieved from user
    logger.info("validate the data recieved from user");
    if (result.hasErrors()) {
        logger.info("form has "+result.getErrorCount()+" errors");

        return "account/createForm";
    } else{
        // if everthings ok, add user details to database
        logger.info("if everthings ok, add user details to database");

        userDb = new UserDb();

        userDb.addNewItem(user);

        // display success and auto log the user to the system.
        return "account/main";
    }

}

Приветствия заранее. Все мои сопоставления таблиц hibvernate xml также находятся в том же месте, что и мой файл hibernate.cfg.xml

Ответы [ 7 ]

26 голосов
/ 08 февраля 2011

Вместо размещения файла hibernate.cfg.xml в каталоге src/com/jr/hibernate/, поместите его в каталог src. Затем он автоматически появится в каталоге WEB-INF/classes, как отмечают люди здесь.

13 голосов
/ 08 февраля 2011

hibernate.cfg.xml должен быть найден в корне пути к классу при запуске веб-приложения.

Если вы используете maven для сборки проекта, поместите hibernate.cfg.xml в каталог src/main/resources, чтобычто при сборке военного пакета он будет автоматически помещен в /WEB-INF/classes.

. Если не используется maven, поместите файл непосредственно в каталог WEB-INF/classes.

3 голосов
/ 08 февраля 2011

hibernate.cfg.xml должно быть в WEB-INF/classes.Кроме того, вы можете загрузить его из пользовательского местоположения, передав соответствующий аргумент методу configure(..).

2 голосов
/ 24 марта 2017

Если вы используете Maven, вы должны поместить файл hibernate.cfg.xml по следующему пути /src/main/java/resources/hibernate.cfg.xml в Intellij IDEA.Затем в своем классе запускаемого приложения просто вставьте строку:

SessionFactory factory = new Configuration (). Configure ("hibernate.cfg.xml"). AddAnnotatedClass (). BuildSessionFactory ();

0 голосов
/ 09 июля 2018

Даже если у меня было hibernate.cfg.xml в папке src, я получаю

 org.hibernate.HibernateException: /hibernate.cfg.xml not found

после запуска mvn clean install.С помощью метода проб и ошибок я смог решить эту проблему, удалив hibernate.cfg.xml из src свернутым и добавив куда-то еще.Запустите приложение (в моем случае это основной класс).Во время этого я все еще получаю ошибку.и добавьте его обратно в папку src и запишите основной класс.It worked!

0 голосов
/ 16 сентября 2015

У меня такая же проблема, и я переместил файл hibernate.cfg.xml в каталог src / main / resources, он будет автоматически помещен в /WEB-INF/classes.

.
0 голосов
/ 20 июня 2015

В IntelliJ перейдите в «Открыть настройки проекта» >> Модули >> Hibernate и укажите целевой файл hibernate.cfg.xml, используемый в вашем проекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...