2

Hibernate のプロパティ要素には属性 update、insert があり、ドキュメントによれば、http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-declaration-財産

update、insert (オプション - デフォルトは true): マップされた列を SQL UPDATE および/または INSERT ステートメントに含める必要があることを指定します。両方を false に設定すると、値が同じ列にマップされる他のプロパティから、またはトリガーや他のアプリケーションによって初期化される純粋な「派生」プロパティが許可されます。

値が「true」ではなく「false」に設定されている場合の動作を理解するのを手伝ってください。ここでの派生プロパティは何ですか?

4

1 に答える 1

1

例で違いを見ることができます - エンティティを作成し、デフォルトinsert設定を使用してそれを永続化すると、エンティティが設定したすべてのフィールドが永続化され、Hibernate ログに予想される生成された挿入 SQL ステートメントが表示されます。何かのようなもの:

Hibernate: insert into SCHEMA1.User (id, firstName, lastName) values (default, ?, ?)

ただし、insert一部のプロパティを false に設定すると、フィールドにエンティティの値が含まれていても、生成された SQL では適切な列が除外されるため、その値は保持されません。firstNameinsertfalse に設定されている場合、生成される SQL は次のとおりです。

Hibernate: insert into SCHEMA1.User (id, lastName) values (default, ?)

これは、firstNameが nullable の場合に機能し、それ以外の場合は失敗します。


説明した原則は にも適用されupdateます。


これらの属性を false に設定することは、永続化しない派生 (計算された) プロパティを扱うドキュメントで言及されている場合に意味があります。実際には、フェッチ時に計算された値を持つ読み取り専用プロパティです (計算は、SELECT サブクエリに変換される SQL 式として宣言されます)。派生プロパティの詳細については、この投稿の例とリンクを確認してください。

于 2013-10-26T21:00:51.713 に答える