hibernateは初めてです。オブジェクトの主キー値があり、DBからオブジェクトをロードする必要があります。get()またはload()を使用するか、基準APIを使用して、オブジェクトをロードできることを読みました。
どちらをどの条件で使用するのが良いのか、少し混乱しています。誰かが私を案内してもらえますか?
Session.get()
オブジェクトがすでにセッションにあるかどうかを確認します。そうであれば、それを返します。そうでない場合は、select ステートメントを実行して、セッション内のオブジェクトの状態をロードし、それを返します。これは、デフォルトで使用する必要がある方法です。
Session.load()
オブジェクトがすでにセッションにあるかどうかを確認します。そうであれば、それを返します。そうでない場合は、初期化されていないプロキシを作成し、プロキシを返します。データベースにもヒットしません。プロキシで呼び出される最初のメソッドは、Hibernate にデータベースからオブジェクトの状態をロードさせ、プロキシを初期化します。通常、このメソッドは、既存のオブジェクトへの参照が必要な場合 (たとえば、1 対 1 の関連付けを初期化する場合) に使用します。
Criteria クエリまたは HQL クエリは、常にデータベースに対してクエリを実行します。と同じことをするためにそれを使用することはありませんSession.get()
。オブジェクトを主キーでロードし、それ以外の場合は を使用して遅延ロードされる関連付けを初期化すると便利ですSession.get()
。すべてのコースを含む学生が必要であることがわかっている場合は、1 つのクエリで学生をロードし、2 つ目のクエリでコースをロードするよりも、1 つのクエリですべてをロードすることをお勧めします。