5

Company クラスと CompanySettings クラスの間には 1 対 1 の関係があります。新しい Company オブジェクトを作成すると (CompanySettings オブジェクトは、その Settings プロパティの Company コンストラクターで作成されます)。

SaveOrUpdate(session, companyObject)

INSERT が Company から CompanySettings にカスケードすることを期待しています。ただし、CompanySettings オブジェクトでも明示的に SaveOrUpdate を呼び出さない限り、これは起こりません。

以下に示すマッピングファイル:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`>
  <class name="AST.Domain.Company, AST.Domain" table="Companies">
    <id name="EntityID" column="CompanyId">
      <generator class="guid.comb" />
    </id>
    <property name="CompanyName" />
    . . .
    <one-to-one name="Settings" class="AST.Domain.CompanySettings, AST.Domain"
                constrained="true" lazy="false" />
  </class>
</hibernate-mapping>

Company Settings クラスのマッピング ファイル:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="AST.Domain.CompanySettings, AST.Domain" table="CompanySettings">
    <id name="EntityID" column="CompanyId">
      <generator class="foreign">
        <param name="property">Company</param>
      </generator>
    </id>
    <property name="MaxUsers" />
    <one-to-one name="Company" class="AST.Domain.Company, AST.Domain" />
  </class>
</hibernate-mapping>
4

2 に答える 2

5

1 対 1 のマッピングを指定cascade="all"してみましたか?

于 2009-05-03T19:26:50.680 に答える
2

Company マッピングで 1 対 1 のカスケード属性を設定します。

しかし、別の注意点として、CompanySettings を別のエンティティではなく、Company の「コンポーネント」としてマッピングすることを考えましたか?

「CompanySettings」は「値オブジェクト」であり、コンポーネントとしてより適切にマッピングする必要があるのではないでしょうか?

こうすることで、CompanySettings の値を「Company」と同じテーブルに入れることができますが、別のクラスとして扱われます。

これは 1 対 1 のマッピングであるため、データ モデルにとってもより良いオプションだと思います。

次に、マッピングは次のようになります。

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`>
  <class name="AST.Domain.Company, AST.Domain" table="Companies">
    <id name="EntityID" column="CompanyId">
      <generator class="guid.comb" />
    </id>
    <property name="CompanyName" />
    . . .
    <component name="Settings" class="AST.Domain.CompanySettings, AST.Domain">
        <property name="MaxUsers" />
    </component>
  </class>
</hibernate-mapping>

実際には 2 つの個別のオブジェクトがあります (Company と CompanySettings、Company には「Companysettings」オブジェクトがありますが、設定は Company テーブルに保存されます)。

または、CompanySettings を別のテーブルに置いた特別な理由はありますか? つまり、これは 1 対 1 の関係であるため、これはまったく必要ありません (そして、私見でも悪い習慣です :) )。

于 2009-05-03T19:29:47.943 に答える