web-dev-qa-db-ja.com

HHH000387休止状態の警告とはどういう意味ですか?

Hibernate 4.0にアップデートしたところ、警告メッセージが表示されます。

HHH000387: ResultSet's statement was not registered

私のログファイルで。これはどういう意味ですか、心配する必要がありますか?

26
stevemac

あまり心配しません。いずれにせよ、このメッセージを回避することはAPIのユーザーの手に渡っていないようです。ロギングはorg.hibernate.engine.jdbc.internal.JdbcResourceRegistryImplで行われます。によると ドキュメント

JdbcResourceRegistryの主な機能は、リソースが確実にクリーンアップされるようにすることです。

コードをざっと見てみると、そのようなメッセージは次の2つの状況でログに記録されます。

  1. ResultSetはregister-methodを介して登録され、ステートメントは登録されません。
  2. ResultSetはrelease-methodを介してリリースされ、ステートメントは登録されません。
1
Mikko Maunu

このログメッセージは、ResultSet.getStatement()が元々Statementの作成を要求されたResultSetを返さないことを示しています。 (これは、メモリリークを示している場合もあります。)これは、JDBCラッパーを使用している場合に発生する可能性があります。これは、ラッパー/デコレータと基になるStatementの2つのStatementオブジェクトがあるためです。

私のプロジェクトには、テスト用の独自のJDBCラッパーがあります。 ResultSetラッパーでこの警告を修正しました。これは、基になるStatement(基になるResultSetを返す)に委任するのではなく、getStatement()が元のStatementプロキシ(not新しいプロキシ)を返すようにすることでした__変数__)。

同様の警告を生成しているJDBCラッパーは、おそらく同様の修正を使用できます。 (同様の問題と修正がメソッドStatement.getConnection()に適用される場合があります。)

ちなみに、このロギングのバグレポートはここにあります: https://hibernate.atlassian.net/browse/HHH-821

1
seanf

このエラーをスローするJdbcResourceRegistryImplクラスのソースを見ると、個人的には、WARNレベルでログを記録するのは過剰だと思います。すべてのStatementをHibernate /フレームワーク構成の一部として暗黙的に登録する方法がない限り、最大でINFOである必要があります。

Statementを登録する必要がある理由は私にはわかりませんが、Hibernateの内部動作のみが問題である場合は、APIユーザーに定期的に警告するのはバグですよね?

1
spume

接続プールを構成しましたか?同じ警告が表示されます。しかし、Mavenの依存関係にc3p0を追加し、hibernate.cfg.xmlで正しく構成した場合。警告が消えます。

0
Qinghai

私の場合、この警告はパフォーマンスの大幅なリークを示していました。 @oneToOneマッピングを使用して休止状態のPOJOオブジェクトがあります。 1つのテーブルに対しては正常に機能し、警告はありません。すべてのレコードを取得するためにMySQlサーバーに1つのリクエストを送信し、次に結合されたテーブルごとに1つのリクエストを送信します。このエラーが発生するPOJOの場合(@oneToOneが見つからない場合):すべてのオブジェクトのリストを取得するための最初の要求を1つ送信し、その後、各レコードのマップされたテーブルに対して新しい要求を送信します。

したがって、テストDBに2000レコードがあるとします。そして、3つの@oneToOneマップテーブル。

良いケースでは、リストを取得するための1つのリクエストと、マップされたテーブルを取得するための3つのリクエストを送信します。

警告の場合、リストを取得するための最初の要求を1つ送信します。次に、DB内の2000レコードごとにマップされた情報を取得するための3つのリクエストを送信します。したがって、1999 * 3 = 5997は、@ Controller(Spring MVC)を呼び出すたびに、ユーザーごとに追加のリクエストを送信します。

WebアプリケーションとMySQLサーバーが同じサーバー上にある間、私はそれに気づいていませんでした。

0