2

都市と郵便番号の関係のマッピングを想像してみてください。(簡単にするために、外部キーを使用しません)

<class name="CityToPostalcode" table="city_to_postalcode" catalog="database">
    <id name="id" type="java.lang.Integer">
        <column name="id" />
        <generator class="identity" />
    </id>
    <property name="city" type="String">
        <column name="city" not-null="true"/>
    </property>
    <property name="postalcode" type="Integer">
        <column name="postalcode" not-null="true"/>
    </property>
    <properties name="businessKey" unique="true">
        <property name="city"/>
        <property name="postalcode"/>
    </properties>
</class>

フレームワークには、特定の組み合わせの一意キー「businessKey」が一意であるかどうかをチェックする関数がありますか(単一列の一意制約の場合も同様)?

たぶん、「businessKey」をクラスにマッピングすることの組み合わせですか?(composite-idの使用法と同様)

確実に自動で実行できる場合は、各テーブルのコードを記述してビジネスキーをチェックするのは非常に冗長です。

4

1 に答える 1

1

natural Idスキーマ作成に一意の制約を自動的に作成し、それをより効率的に照会するために使用できるものがあります。xmlで

<natural-id>
    <property name="name"/>
    <property name="org"/>
</natural-id>

naturalidsは第2レベルのキャッシュをより効率的に使用し、H4.1以降、naturalidによるロードでは第1レベルのキャッシュを使用し、ラウンドトリップを節約できます。それ以外の自然なIDは、通常のプロパティとまったく同じです。ただし、一般的な自然IDチェッカーを作成することはできます

  1. プロパティを設定して新しいオブジェクトを作成します
  2. セッションファクトリを介したオブジェクトのclassmetadataへのアクセス
  3. 自然IDプロパティを繰り返し、それらを使用してオブジェクトから値を取得し、using(propertyname、propertyvalue)に設定します。
  4. 何かが見つかった場合はデータをコピーし、そうでない場合は作成したオブジェクトを保存します
于 2012-07-06T06:16:50.080 に答える