我的應用程序使用Persistence API,Hibernate和Spring運行。我正在使用MySql DB。 有些查詢可能需要很長時間來計算,所以我需要一個取消按鈕來取消這些查詢的執行。如何在java持久性中取消正在運行的查詢?
我發現有一個用於取消查詢的memthod java.sql.statement.cancel(),但是這可以從statement對象中訪問,如何從Java持久性中的entityManager對象執行此操作?
我的應用程序使用Persistence API,Hibernate和Spring運行。我正在使用MySql DB。 有些查詢可能需要很長時間來計算,所以我需要一個取消按鈕來取消這些查詢的執行。如何在java持久性中取消正在運行的查詢?
我發現有一個用於取消查詢的memthod java.sql.statement.cancel(),但是這可以從statement對象中訪問,如何從Java持久性中的entityManager對象執行此操作?
您可以使用Hibernate的Session對象CancelQuery()方法。
此外,如果您想自動執行此操作,您可以設置查詢超時。 JPA 2定義了javax.persistence.query.timeout提示來指定以毫秒爲單位的默認超時。 (自Hibernate 3.5起可用)
JPA提供javax.persistence.query.timeout提示以指定以毫秒爲單位的查詢超時。這個提示可以在@NamedQuery或@NamedNativeQuery中指定。它也可以通過調用setHint方法在Query或TypedQuery上指定。由提示定義的查詢超時可以由setHint方法覆蓋。
默認查詢超時可以在persistence.xml中的應用程序指定,如下圖所示:
<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
...
<property name="javax.persistence.query.timeout"
value="30" />
</properties>
</persistence-unit>
我不知道如何取消查詢,但你可能更喜歡把超時與javax.persistence.query .timeout jpa屬性,以毫秒爲單位。 – bhdrkn