如何在java持久化中取消正在运行的查询?

时间:2015-06-17 05:53:04

标签: java spring hibernate

我的应用程序使用Persistence API,Hibernate和Spring运行。我正在使用MySql DB。 有些查询可能需要花费大量时间来计算,因此我需要一个取消按钮来取消执行这些查询。

我发现有一个memthod java.sql.statement.cancel()用于取消查询,但是这可以从语句对象中访问,如何在Java持久化中从entityManager对象中执行此操作?

1 个答案:

答案 0 :(得分:2)

您可以使用hibernate会话对象 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>