3

我尝试过的...

使用标准:

criteria.setTimeout(1);

=> 零效应

使用 HQL:

return getSession().createQuery("from User").setTimeout(1).list();

=> 零效应

甚至在事务级别上尝试过:

@Transactional(timeout = 1, readOnly = true, propagation = Propagation.REQUIRES_NEW)

一些效果;执行查询后会引发异常,但事务在 1 秒后未中止。

这是在带有 Atomikos TM 的 Jetty 服务器上运行的。

如何在特定查询上指定超时,以便在超时后中止调用(这不会是 1 秒,这只是为了更快地测试)?

更新

当运行相同的测试但绕过 Atomikos/Hibernate/Spring(因此使用普通 JDBC)时,超时确实有效(大约至少;它不会正好是 1 秒,在 H2 上它非常接近,在 Oracle 上有时超过 2 秒)。结果如预期:SQLException: ORA-01013: user requested cancel of current operation

更新

在调试休眠时,我看到在 PreparedStatement 上设置了超时,但它似乎没有效果。

4

0 回答 0