IllegalStateException LogicalConnectionManagedImpl is closed Hibernate

Posted

技术标签:

【中文标题】IllegalStateException LogicalConnectionManagedImpl is closed Hibernate【英文标题】: 【发布时间】:2020-10-13 22:07:49 【问题描述】:

我在 JAVA 上使用带有休眠功能的 H2 数据库,但遇到了一个奇怪的错误。 我创建了抽象存储库来管理基本的 CRUD 操作。

我得到的例外是:

java.lang.IllegalStateException: org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@d20d74a is closed
at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.errorIfClosed(AbstractLogicalConnectionImplementor.java:37)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:135)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:254)
at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:116)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.rollback(JdbcResourceLocalTransactionCoordinatorImpl.java:294)
at org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:139)
at repositories.AbstractRepository.save(AbstractRepository.java:32)
at services.ResultService.saveResult(ResultService.java:76)
at services.API.WebRequestService.run(WebRequestService.java:124)
at services.API.ThreadService.run(ThreadService.java:67)

AbstractRepository 保存方法:

public <T> T save(T t) 
    Transaction transaction = null;
    try (Session session = HibernateConfig.getSessionFactory().openSession()) 
        transaction = session.beginTransaction();
        Serializable entityId = session.save(t);
        transaction.commit();

        T createdEntity = (T) session.get(t.getClass(), entityId);
        return createdEntity;

     catch (Exception e) 
        if (transaction != null) 
            transaction.rollback();
        
        e.printStackTrace();
    
    return null;

我是一名 CS 学生,我对 Hibernate 不是很熟悉。我的计算机上没有出现此错误,仅在其他已构建 JAR 文件的计算机上出现。

P.S 英语不是我的主要语言,所以如果你听不懂我很抱歉!

【问题讨论】:

【参考方案1】:

经过数小时的调试,我发现了错误! 错误是列超过了长度,并且异常来自 catch 块。 catch 块试图回滚它的连接已经关闭的东西。 我希望这会对某人有所帮助!

【讨论】:

【参考方案2】:

我在尝试使用 Hibernate 5.5.3 版在两个表之间创建嵌入关系时遇到了同样的错误。是的,上面的答案对我一次调试错误很有帮助。感谢@William。在我的情况下也是如此,由于 Embeddable 类中发生异常,catch 块试图回滚事务。问题是我在 Embeddable 类中没有默认构造函数。

谢谢!

【讨论】:

以上是关于IllegalStateException LogicalConnectionManagedImpl is closed Hibernate的主要内容,如果未能解决你的问题,请参考以下文章

在myeclipse部署web应用时,经常报java.lang.IllegalStateException错误,具体情况如下:

java.lang.IllegalStateException:Web app root system property already set to different value 错误原因及解决

无法索引类 module-info.class atlog4j-api.jar:java.lang.IllegalStateException:未知标签! pos=4 池数 = 24

java.lang.IllegalStateException: Web app root system property already set to different value

IllegalStateException:链接没有设置 NavController

AsyncTask上的IllegalStateException [重复]