Получение org.hibernate.HibernateException: не настроен CurrentSessionContext - PullRequest
1 голос
/ 07 января 2020

Я создал проект maven с hibernate 5.4 и успешно создал DAO сейчас, когда я пытаюсь получить Hibernate Session через getSessionFactory().getCurrentSession() Я получаю исключение org.hibernate.HibernateException: Нет CurrentSessionContext настроен! , хотя у меня есть уже добавлено <property name="hibernate.current_session_context_class">thread</property> в файл hibernate.cfg. xml. Уже проверил несколько форумов, включая этот вопрос org.hibernate.HibernateException: не настроен CurrentSessionContext , но не может его решить,

Вот файл hibernate.cfg. xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">onetozero</property>
        <property name="hibernate.connection.url">jdbc:mysql://192.168.0.112:3306/ecdis</property>
        <property name="hibernate.connection.username">root1</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
        <property name="show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.current_session_context_class">thread</property>

        <mapping class="Domain.Route"/>
        <mapping class="Domain.RoutePoint"/>
    </session-factory>
</hibernate-configuration>

HibernateSession Class

public class HibernateSession {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private 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);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }

}

и вот как я использую получение списка через DAO

public List<T> list() {
        Session session = HibernateSession.getSessionFactory().getCurrentSession();
        CriteriaQuery<T> query = session.getCriteriaBuilder().createQuery(entityClass);
        query.select(query.from(entityClass));
        return session.createQuery(query).getResultList();
    }

Я новичок новичок в Java и Hibernate, также не использующий фреймворк atm, поэтому небольшая деталь может также go на этом пути. ТИА

1 Ответ

0 голосов
/ 08 января 2020

Используйте HibernateSession.getSessionFactory (). OpenSession () вместо getCurrentSession () для получения сеанса, тогда фабрика сеансов будет привязывать сеанс к текущему контексту, так как вы используете поток класса контекста текущего сеанса, а не JTA. Подробности здесь

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