我的应用程序使用Persistence API,Hibernate和Spring运行。我正在使用MySql DB。 有些查询可能需要花费大量时间来计算,因此我需要一个取消按钮来取消执行这些查询。
我发现有一个memthod java.sql.statement.cancel()用于取消查询,但是这可以从语句对象中访问,如何在Java持久化中从entityManager对象中执行此操作?
答案 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>