JPA/Hibernateを介したクエリとストレートSQLが機能しているように見える読み取り専用操作のために、まだトランザクションを開始していないコードがあるようです。hibernate/jpa セッションはフレームワークによって開かれていましたが、レガシー コードのいくつかの場所で、トランザクションが開かれていないことがわかりました。
結局、EntityManager.persist と EntityManager.merge を使用しない限り、コードは通常実行されるようです。ただし、たまに (おそらく 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-Persist -Guice-Servlet -MySql 5.1.63 -Hibernate/C3P0 4.1.4.Final -Jetty