【问题标题】:Exception in thread "main" java.lang.IllegalStateException: Session/EntityManager is closed线程“主”java.lang.IllegalStateException 中的异常:Session/EntityManager 已关闭
【发布时间】:2017-06-11 17:25:30
【问题描述】:

我想运行这个非常基本的 Hibernate 代码:

public static void main(String[] args) throws Exception
    {

        SessionFactory sessFact = HibernateUtil.getSessionFactory();
        Session session = sessFact.getCurrentSession();
        Transaction tr = session.beginTransaction();

        SystemUsers myContact = new SystemUsers(3);
        SystemUsers yourContact = new SystemUsers(4);
        SystemUsers yourContsact = new SystemUsers(5);
        SystemUsers yourContssssact = new SystemUsers(6);
        SystemUsers yourContssssasssct = new SystemUsers(7);

        // Saving to the database
        session.save(myContact);
        session.save(yourContact);
        session.save(yourContsact);
        session.save(yourContssssact);
        session.save(yourContssssasssct);

        session.flush();
        tr.commit();

        List<SystemUsers> contactList = session.createQuery("from SYSTEM_USERS").list();

        for (SystemUsers contact : contactList)
        {
            System.out.println("Id: " + contact.getId());
        }

        System.out.println("Successfully inserted");
        sessFact.close();
    }

配置文件:

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.SQLiteDialect</property>
        <property name="hibernate.connection.driver_class">org.sqlite.JDBC</property>
        <property name="hibernate.connection.url">jdbc:sqlite:/C:/sqlite/test.sqlite</property>
        <property name="hibernate.connection.username"></property>
        <property name="hibernate.connection.password"></property>
                <property name="hibernate.connection.release_mode">auto</property>
                <property name="current_session_context_class">thread</property>
                <property name="hibernate.connection.autoReconnect">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping class="com.web.models.SystemUsers"/>
    </session-factory>
</hibernate-configuration>

我得到错误:

Exception in thread "main" java.lang.IllegalStateException: Session/EntityManager is closed
    at org.hibernate.internal.AbstractSharedSessionContract.checkOpen(AbstractSharedSessionContract.java:337)
    at org.hibernate.engine.spi.SharedSessionContractImplementor.checkOpen(SharedSessionContractImplementor.java:135)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:648)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:102)

我使用最新的 Hibernate 版本。你能给我一些建议,我该如何解决这个问题?

可能我需要初始化不同的工厂?

【问题讨论】:

  • 您能否发布完整的堆栈跟踪以查看异常被触发的位置

标签: java hibernate nhibernate-mapping


【解决方案1】:

我认为问题出在

session.flush();//this will flush all the data in the session so for commmiting there wont be any data.
tr.commit();

试试这个。

tr.commit();
 session.flush();

【讨论】:

    猜你喜欢
    • 2020-07-16
    • 1970-01-01
    • 2017-03-16
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多