我们正在使用spring数据jpa,并且在一个地方我们注入了实体管理器。
对于我们使用jpa-repository的所有其他功能,但是对于一个功能,我们使用注入的实体管理器。这在应用程序启动后的一段时间内正常工作但开始给出以下错误。经过一段时间后,实体管理器似乎删除了数据库连接。无法复制这个。在实体管理器中是否有任何超时设置,之后它会丢弃数据库连接。
的PersistenceException:
org.hibernate.exception.GenericJDBCException: could not inspect JDBC autocommit mode javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not inspect JDBC autocommit mode at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:458)
答案 0 :(得分:2)
实体经理本身没有这样的东西。但是,您的数据库可能会在一段时间后关闭连接,特别是当它们处于空闲状态时,或者执行大量工作时(数据库可以对连接或事务可能使用的CPU时间有一个限额)。
您的连接池是此类意外的另一个可能来源。
有趣的问题是:为什么它只发生在您直接使用的实体管理器上。一个可能的原因是您没有正确释放连接。这可能会使连接池认为它们过时并在一些超时后关闭它们。
为了对此进行调试,我首先检查您的连接池配置并激活它的日志记录,以便您可以看到何时返回连接以及池可能触发的任何其他特殊事件。