0

Hibernateがどのように機能するか知りたいのですが...A、B、Cの3つのエンティティクラスがあるとします。

私はすでに次の事実を知っています:

  • Bオブジェクトに対してselectステートメントは実行しません。
  • Bに数十万の新しい行を(persist()を呼び出して)挿入します。
  • Aオブジェクトを数百回選択して更新します。
  • Cオブジェクトに対しては何の操作も行いません。
  • 以前にデータベースに保存された数十万のCオブジェクトがあります。
  • 別のセッションでは、まったく同じ操作を繰り返します。

その結果、データベースはますます大きくなり、Bオブジェクトでpersist()を呼び出すのが遅くなることに気づきました。

私の質問は次のとおりです。

  1. hibernateはデータベース内のすべてのオブジェクトをロードしますか?すべてのA、B、Cオブジェクト?
  2. データベースからオブジェクトをロードするためにhibernateが実行している操作を確認するにはどうすればよいですか?
  3. ロード操作を制御できますか?実際、Cオブジェクトをロードしたくないし、Bオブジェクトもロードしたくない。
  4. エンティティオブジェクトとして実際にロードされたデータベース内のレコードを確認および制御するにはどうすればよいですか?
  5. BオブジェクトのIDの一意性に関する検証操作がある場合、この検証をログファイルで確認できますか?
  6. 検証操作を非アクティブ化して、Bオブジェクトのpersist()操作を高速化できますか?実際、コード内でIDの一意性を管理でき、休止状態でそれを検証したくありません。
4

1 に答える 1

2

1)いいえ、必要なものだけです

2)実行されたSQLおよびDMLセンテンスを表示するようにHibernateログを構成できます

3)選択したオブジェクトのみをロードします。さらに、関連付けにEAGERまたはLAZYを指定できます

4)なぜあなたはこれをしたいのですか?それは休止状態のタスクです。

5)IDが一意でない場合、それはIDではありません。限目。

6)HibernateはDBに送信するだけで、DBはほとんどのチェックを実行します。パフォーマンスのためにHibernateを「微調整」したい場合は、その操作にHibernateを使用しないでください。

于 2012-08-13T22:01:55.370 に答える