NHibernate を使用してマップしたい次のクラスがあります。
class User
{
long Id {get; set;}
IList<UserPassword> OldPasswords {get; set}
}
class UserPassword
{
long UserId {get; set;}
string Password {get; set;}
DateTime CreateDtm {get; set;}
}
データベース(Oracle)のUserPasswordテーブルでは、UserId、Password、およびCreateDtmは複合キーです(これは変更できません)
現在、私のマッピングファイルは次のようになっています
<hibernate-mapping assembly="DomainEntities" namespace="DomainEntities.Models" xmlns="urn:nhibernate-mapping-2.2">
<class name="User" table="USERS" lazy="true" >
<id name="Id">
<column name="USER_ID" sql-type="NUMBER" not-null="true" unique="true"/>
<generator class="identity"/>
</id>
<bag name="OldPasswords" cascade="all" inverse="true">
<key column="USER_ID" not-null="true" />
<one-to-many class="UserPassword" />
</bag>
</class>
</hibernate-mapping>
<hibernate-mapping assembly="DomainEntities" namespace="DomainEntities.Models" xmlns="urn:nhibernate-mapping-2.2">
<class name="UserPassword" table="USER_PASSWORDS" lazy="true" >
<composite-id>
<key-property name="UserId" column="USER_ID" />
<key-property name="Password" column="OLD_PASSWORD" />
<key-property name="CreateDtm" column="CREATE_DATE" />
</composite-id>
</class>
</hibernate-mapping>
ユーザーオブジェクトを照会すると、ユーザーパスワードが正しく読み込まれますが、新しいパスワードをリストに追加または削除できません。
User オブジェクトにマッピングを追加しようとしましたが、トランザクションをコミットしようとすると、CreateDtm の無効な配列インデックスで例外がスローされました。これは複合キーが原因だと思います。
マッピングに欠けているものがありますか?それとも、これは実行できないシナリオですか?