Hibernate SQLクエリ実行のタイムアウト時間設定
2009/09/04 17:12Update
SQLを発行して、なかなか返してこない、そのため、次の処理を進まない、実行中のSQLをキャンセルしたいという場合がしばしばあります。本文はHibernateでのSQLクエリ実行のタイムアウト時間設定方法について解説します。
JDBCのタイムアウト設定
ちなみに、JDBCの場合、Statement.setQueryTimeout(秒数)でタイムアウト設定ができます。
java.sql.Statement#
public void setQueryTimeout(int seconds)
JDBCドライバが Statement オブジェクトの実行の待つ秒数を指定します。
この時間を経過すると、SQLException がスローされます。
※Oracleでテストしてみました、データベースに発行済みのSQLの実行もキャンセルされるらしい。
コード
String sql = ...; //SQL文
Connection conn = ...; //JDBCコネクション取得
try {
PreparedStatement statement = conn.prepareStatement(sql);
...
statement.setQueryTimeout(60); //60秒でタイムアウト
} catch (SQLException e) {
... //TODO エラー処理
}
int count = statement.executeQuery(); //クエリSQL実行
Hibernateのタイムアウト設定
Hibernateの場合、以下のようにタイムアウト時間を設定します。
■トランザクション・タイムアウト
Session session = ...; //Session取得 Transaction transaction = session.getTransaction(); transaction.setTimeout(60); //60秒でタイムアウト transaction.begin(); ... transaction.commit();
■クエリ・タイムアウト
Session session = ...; //Session取得 ... String queryHql = ...; //HQL文 Query query = session.createQuery(queryHql); //getNamedQuery ... query.setTimeout(60); //60秒でタイムアウト ...
■c3p0
Hibernate c3p0 - よく利用されているコネクションプーリング参考資料
PreparedStatement (Java Platform SE 6)
org.hibernate.Query API doc
org.hibernate.Transaction API doc
Sponsored Link
- Relative Articles
- Hibernate設定ファイルその1 - hibernate.cfg.xml - (2008/07/09 14:08)
- Hibernate c3p0 - よく利用されているコネクションプーリング - (2008/07/09 15:00)
- Hibernate 方言(Dialect)一覧 - (2008/07/09 15:10)
- Hibernate のSessionとSessionFactory - (2008/07/09 15:51)
- ThreadLocal でHibernate Session を効率的に管理する - (2008/07/09 18:43)
- Hibernateで複数のDBに接続するには? - (2008/07/09 18:47)
- Hibernateとは - (2008/07/11 14:23)
- Hibernate のインストール - (2008/07/24 11:01)
- Hibernate の開発手順 - (2008/07/24 12:44)
- Hibernate SQLをログに出力方法 - (2008/07/30 16:06)