在我看來,我們有一些代碼沒有爲只讀操作啓動事務,但我們通過JPA/Hibernate進行的查詢以及直接SQL似乎都有效。我們的框架會打開一個hibernate/jpa會話,但對於遺留代碼中的一些點,我們發現沒有事務正在打開。在不啓動事務的情況下通過Hibernate對MySQL數據庫運行查詢有什麼含義?
什麼似乎最終發生的是,代碼通常運行,只要它不使用EntityManager.persist和EntityManager.merge。但是曾經在一段時間(也許1/10)倍servlet容器失敗,此錯誤...
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.)
至於我可以告訴只有在我們的應用程序代碼的幾個景點,沒有交易前開始查詢將會產生這個問題。其他人是否認爲這可能是導致此行爲的非事務性查詢運行?
FYI這裏是我們的堆棧...
-Guice -Guice,堅持 -Guice小服務程序 -MySql 63年5月1日 -HIBERNATE/C3P0 4.1.4.Final -Jetty