5
try {
   x = session.load(...); 
   y = x; 
 }
 catch(Exception e) {
    //do something
 }

キーが存在しない場合、load(...) は例外をスローします

  1. すぐに
  2. オブジェクトが後でデータベースから取得しようとすると、プロキシを返し、例外をスローしますか?

また、上記のコードで、実行が代入 y = x に達した場合、その時点で x が null ではないことが保証されますか? その時点で x が null になる状況はありますか?

4

2 に答える 2

6

要するに:

  • xロード後に null にならないため、どちらもy
  • load()オブジェクトが存在しない場合の例外がある場合とない場合があります
  • からの例外がなくload()、オブジェクトが存在しない場合、xまたはへのアクセス時に例外が発生しyます。

詳しく説明するには:

キーが存在するかどうかを判断しようとしていますか? それとも、異常を処理したいだけだと思いますか?

具体的には、ドキュメントを参照してください。

このメソッドを使用して、インスタンスが存在するかどうかを判断しないでください (get()代わりに使用してください)。これは、存在すると想定されるインスタンスを取得する場合にのみ使用してください。存在しない場合は実際のエラーになります。

load() の使用に関する書籍「hibernate in action」から:

アプリケーションは、永続状態を取得するためにデータベースにアクセスすることなく、永続インスタンスへの有効な参照 (プロキシ) を取得できます。その load()ため、キャッシュまたはデータベースで永続オブジェクトが見つからない場合、例外がスローされない場合があります。後でプロキシにアクセスすると、例外がスローされます。

だから

アイテムが存在するかどうかを知りたい場合はget()、 ではなくを使用してくださいload()

于 2012-07-25T22:55:26.933 に答える
3

@Tassによる応答に加えて、私は見つけました(同僚のおかげで)

  1. @Proxy(lazy = "false")の場合、例外はすぐにスローされます
  2. @Proxy(lazy = "true")の場合、例外はスローされません
于 2012-07-25T23:56:29.660 に答える