2015-06-17 16 views
0

我的應用程序使用Persistence API,Hibernate和Spring運行。我正在使用MySql DB。 有些查詢可能需要很長時間來計算,所以我需要一個取消按鈕來取消這些查詢的執行。如何在java持久性中取消正在運行的查詢?

我發現有一個用於取消查詢的memthod java.sql.statement.cancel(),但是這可以從statement對象中訪問,如何從Java持久性中的entityManager對象執行此操作?

+1

我不知道如何取消查詢,但你可能更喜歡把超時與javax.persistence.query .timeout jpa屬性,以毫秒爲單位。 – bhdrkn

回答

2

您可以使用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> 
+0

好的,有沒有一種方法可以從entityManager中調用呢? – rd22

+0

它很難從EntityManager中明確的取消它,你需要設置超時時間。如果查詢沒有在指定的時間執行,那麼這將處理取消查詢。 –

+0

因此Entitymanger沒有辦法做到這一點,除了超時嗎? – rd22