Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不启动事务的情况下,通过Hibernate对MySQL数据库运行查询意味着什么?_Java_Mysql_Hibernate_Jdbc_Guice Persist - Fatal编程技术网

Java 在不启动事务的情况下,通过Hibernate对MySQL数据库运行查询意味着什么?

Java 在不启动事务的情况下,通过Hibernate对MySQL数据库运行查询意味着什么?,java,mysql,hibernate,jdbc,guice-persist,Java,Mysql,Hibernate,Jdbc,Guice Persist,在我看来,对于只读操作,我们有一些代码还没有启动事务。我们通过JPA/Hibernate以及直接SQL进行的查询似乎可以工作。我们的框架可能已经打开了hibernate/jpa会话,但对于遗留代码中的一些点,我们发现没有打开任何事务 最终出现的情况似乎是,只要代码不使用EntityManager.persist和EntityManager.merge,它通常就会运行。但是,servlet容器偶尔(可能是1/10)会因此错误而失败 Failed to load resource: the serv

在我看来,对于只读操作,我们有一些代码还没有启动事务。我们通过JPA/Hibernate以及直接SQL进行的查询似乎可以工作。我们的框架可能已经打开了hibernate/jpa会话,但对于遗留代码中的一些点,我们发现没有打开任何事务

最终出现的情况似乎是,只要代码不使用EntityManager.persist和EntityManager.merge,它通常就会运行。但是,servlet容器偶尔(可能是1/10)会因此错误而失败

Failed to load resource: the server responded with a status of 500 (org.hibernate.exception.JDBCConnectionException: The last packet successfully received from the server was 314,024,057 milliseconds ago.  The last packet sent successfully to the server was 314,024,057 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.) 
据我所知,在我们的应用程序代码中,只有少数在查询之前没有启动事务的地方会出现这个问题。其他人是否认为可能是运行的非事务性查询导致了这种行为

仅供参考这是我们的堆栈

-圭斯 -Guice坚持 -Guice Servlet -MySql 5.1.63 -Hibernate/C3P04.1.4.Final -码头是的,我想是的

如果启动查询而不打开事务,则底层将自动打开该事务。具有已打开事务的此连接将返回到连接池并提供给另一个用户,该用户将接收到与已打开事务的连接,这可能导致状态不一致

在我的公司,过去在只读非事务查询方面有很多问题,我们调整了框架来处理这些问题。 除此之外,我们还与BoneCP开发人员进行了交谈,他们同意开发一组功能来帮助处理这个问题,比如自动回滚返回到池中的未提交事务,并打印一个堆栈跟踪,跟踪忘记提交事务的方法

这里讨论了这个问题: