【发布时间】:2015-11-26 06:23:22
【问题描述】:
我知道statement.cancel()可以用来取消一个正在运行的SQL查询,但我想知道的是,我将如何在另一个线程中获取这个语句对象。
用例:
- 我请求启动一个运行语句的线程。
- 然后从一个单独的请求(另一个线程)我可能想取消这个线程。
如何在这个新请求中获得调用cancel方法的语句。
在某些情况下,我会运行多个语句。
附加信息,它是一个web应用程序,使用spring框架、hibernate和JPA。现在在 UI 中有 2 个按钮,按钮 1 将触发 SQL 查询,按钮 2 必须取消该查询
我提到了this 示例,但它使用同一个线程来调用新线程,我不能这样做。
这是查询的开始方式:
Query query = mEntityManager.createNativeQuery(globalQuery.toString());
List<Object[]> results = query.getResultList();
编辑:
- 我能想到的一种方法是跟踪所有正在运行的语句,然后找到必须取消 SQL 语句的语句。
【问题讨论】:
-
为什么不先说这个“SQL 查询”是从哪里调用的呢?
-
所以我有 2 个客户端请求,第一个将启动查询,第二个应该取消它
-
附加信息,它是一个web应用程序,使用spring框架,hibernate和JPA。现在在 UI 中有 2 个按钮,按钮 1 将触发 SQL 查询,而按钮 2 必须取消该查询。
-
问题中更新了。
-
设置查询提示“javax.persistence.query.timeout”,它应该超时。 JPA 不提供取消查询的机制(与 JDO 不同)。否则,如果您的提供商允许诸如取消之类的操作,您必须依赖供应商的详细信息