私はNHibernateにはかなり新しく、私はNHibernateマッピングで<joined-subclass>
に存在する拡張テーブルから2つのカラムが必要なこの問題がありますが、適切な実装を見つけるのが最も困難な時期です。NHibernate <Join>内<joined-subclass>内または代替
以下は私の実装の簡略化されたバージョンです。私が最初に必要としていたことを達成する方法だと思っていましたが、NHibernateは<join>
を<joined-subclass>
に入れません。
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Sample.NHibernate"
namespace="Sample.NHibernate.ProgramAssociationAggregate"
default-access="property">
<!-- Class definition -->
<class name="ProgramAssociation" table="ProgramAssociation" lazy="false">
<!-- Composite primary key -->
<composite-id>
<key-property name="BeginDate" column="BeginDate" type="date" />
<key-property name="OrganizationId" column="OrganizationId" type="int" />
<key-property name="ProgramName" column="ProgramName" type="string" length="60" />
<key-property name="ProgramTypeId" column="ProgramTypeId" type="int" />
<key-property name="PersonId" column="PersonId" type="int" />
</composite-id>
<!-- Optimistic locking for aggregate root -->
<version name="LastModifiedDate" column="LastModifiedDate" type="timestamp" />
<!-- Transient state detection -->
<property name="CreateDate" column="CreateDate" type="DateTime" not-null="true" />
<!-- Unique Guid-based identifier for aggregate root -->
<property name="Id" column="Id" type="guid" not-null="true" />
<!-- Properties -->
<property name="EndDate" column="EndDate" type="date" />
<!-- Derived classes -->
<joined-subclass name="Sample.NHibernate.ProgramAssociationAggregate.SpecialProgramAssociation" table="SpecialProgramAssociation" lazy="false">
<key>
<column name="BeginDate" />
<column name="OrganizationId" />
<column name="ProgramName" />
<column name="ProgramTypeId" />
<column name="PersonId" />
</key>
<!-- PK properties -->
<property name="PersonId" column="PersonId" type="int" not-null="true" insert="false" />
<property name="ProgramTypeId" column="ProgramTypeId" type="int" not-null="true" insert="false" />
<property name="BeginDate" column="BeginDate" type="date" not-null="true" insert="false" />
<property name="ProgramName" column="ProgramName" type="string" length="60" not-null="true" insert="false" />
<property name="OrganizationId" column="OrganizationId" type="int" not-null="true" insert="false" />
<!-- Properties -->
<property name="IEPReviewDate" column="IEPReviewDate" type="date" />
<property name="IEPBeginDate" column="IEPBeginDate" type="date" />
<property name="IEPEndDate" column="IEPEndDate" type="date" />
<!-- Trying to join this table, but NHibernate does not allow for this. What is the best way to accomplish essentially the same thing? -->
<join table="SpecialProgramAssociationExtension" schema="extension">
<key>
<column name="BeginDate" />
<column name="OrganizationId" />
<column name="ProgramName" />
<column name="ProgramTypeId" />
<column name="PersonId" />
</key>
<property name="IEPEventCode"/>
<property name="WrittenConsentDate" type="date"/>
</join>
</joined-subclass>
</class>
</hibernate-mapping>
NHibernateの経験が豊富な人は、私が必要としていることを達成する方法を知っていますか?
最近私はthis NHibernate resourceを使用していますが、この苦境にはあまり役に立たないことが証明されています。
私に指摘できるヒントやリソースがあれば幸いです。
ありがとうございます。
ちょっとした注意:データベースモデルを変更できない限り、コンポジットキーは使用しないでください。このケースでのみサポートされています。それには多くのドローバックがあり、避けることができないときにはそれを使いこなす価値はありません。 –