如何使用Hibernate在SQL语句上设置超时

时间:2015-03-17 18:02:32

标签: oracle hibernate hibernate-criteria spring-transactions atomikos

我尝试过的......

使用标准:

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上设置了超时,但似乎没有效果。

0 个答案:

没有答案