2011-06-23 9 views
0

ハイバネートマッピングファイル内のジェネレータエレメントは、プライマリキーの生成方法を決定するために使用されるはずです。デフォルト値が割り当てられていないと、一時オブジェクトに対してが不正なのはなぜですか?ハイバーネイト割り当てジェネレータ

答えて

0

アプリケーションに識別子を割り当てる場合、Hibernateがそれらを生成するのではなく、割り当てられたジェネレータを使用できます。この特殊ジェネレータは、オブジェクトの識別子プロパティにすでに割り当てられている識別子値を使用します。プライマリキーがサロゲートキーの代わりにナチュラルキーである場合、ジェネレータが使用されます。これは、要素を指定しない場合のデフォルトの動作です。

割り当てられたジェネレータは、Hibernateにunsaved-value = "undefined"を使用させます。これにより、Hibernateはデータベースにアクセスして、バージョンまたはタイムスタンプ・プロパティがないか、またはInterceptor.isUnsaved()を定義しない限り、インスタンスが一時的かどうかを判別します。

+0

ステートメント_Thisは、インスタンスが一時的であるかdetached_であるかを判断するためにHibernateをデータベースに移動させます。これは、Hibernateが非保存値を使用してオブジェクトが切り離されているかどうかを判断することを意味します。これは、Hibernateが保存されていない値を使ってオブジェクトが一時的であるかどうかを判断するため、正しいものではありません。 – Chezzplayer

+1

ああ...私はそれを得る。保存されていない値が一致すると、Hibernateはその一時オブジェクトを認識し、INSERTを使用します。もしそうなら、Hibernateはそれが分離されていることを知り、UPDATEを使います。 – Chezzplayer