我尝试过的......
使用标准:
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:用户请求取消当前操作。
更新
调试hibernate时,我看到在PreparedStatement上设置了超时,但似乎没有效果。