2

状況は次のとおりです。

データベース スキーマが指定されている Oracle データベースがあるため、これを変更することはできません。ID はデータベースを通じて生成され、主キーです。OR マッパーは自作のものであり、NHibernate に置き換える必要があります。

関連付けのみがあり、継承がない 2 つのテーブルがあります。

  1. ModeType : ID、名前、オリジン
  2. モード: ID、Mode_Type_ID、コメント

私が持っているクラスは次のとおりです。

  1. ModeType : パブリック プロパティ: ID、名前、オリジン
  2. ModeProduction : パブリック プロパティ: ID、ModeType_ID、Comment
  3. ModeQualityCheck : パブリック プロパティ: ID、ModeType_ID、コメント

「古い」OR マッパーでは、クラスModeProductionModeQualityCheckがテーブルModeに永続化されます。たとえば、すべてのModeProductsを取得 (および書き戻す) したい場合、ModeProductsは、"ModeType_ID" が"Origin" = 1 のModeTypeテーブルの "ID" と等しいテーブルModeから取得されます。プロパティ/列"Origin" は識別子のように機能しますが、継承はありません。

では、NHibernate でこれをマップして同じ効果を得るにはどうすればよいでしょうか。ModeTypeテーブルで Origin が 1 であるすべてのModeProductsを取得 (および後で書き戻す) するにはどうすればよいでしょうか?

これまでのところ、次の XML マッピングがあります。

モードタイプ:

  <?xml version="1.0" encoding="utf-8" ?>
  <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                     assembly="Domain"
                     namespace="Domain.Domain">
    <class name="ModeTypeBase" table="MODE_TYPES">
      <id name="Id" column="ID" access="nosetter.camelcase-underscore">
        <generator class="sequence">
          <param name="sequence">MODE_TYPES_SEQ</param>
        </generator>
      </id>
      <property name="Name" column="NAME" not-null="true" />
      <property name="Origin" column="ORIGIN" not-null="true" />
    </class>
  </hibernate-mapping>

ModeProduction: (テーブルModeTypeの Origin = 1 )

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Domain"
                   namespace="Domain.Domain">
  <class name="ModeProduction" table="MODES">
    <id name="Id" column="ID" access="nosetter.camelcase-underscore">
      <generator class="sequence">
        <param name="sequence">MODES_SEQ</param>
      </generator>
    </id>
    <property name="Comment" column="COMMENT" not-null="true" />
    <many-to-one name="ModeTypeObject" class="ModeType" column="MODE_TYPE_ID" cascade="save-update" not-null="true" />
  </class>
</hibernate-mapping>

ModeQualityCheck: (テーブルModeTypeの Origin = 0 )

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Domain"
                   namespace="Domain.Domain">
  <class name="ModeQualityCheck" table="MODES">
    <id name="Id" column="ID" access="nosetter.camelcase-underscore">
      <generator class="sequence">
        <param name="sequence">MODES_SEQ</param>
      </generator>
    </id>
    <property name="Comment" column="COMMENT" not-null="true" />
    <many-to-one name="ModeTypeObject" class="ModeType" column="MODE_TYPE_ID" cascade="save-update" not-null="true" />
  </class>
</hibernate-mapping>

誰か助けてくれませんか?

4

0 に答える 0