私が試したこと...
基準の使用:
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 に設定されていることがわかりますが、効果がないようです。