簡體   English   中英

NHibernate映射帶有復合鍵的子級

[英]NHibernate mapping child with composite key

我想使用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的無效數組索引上引發了異常。 我懷疑這是因為組合鍵。

我是否在映射中缺少某些內容,或者這是無法完成的方案?

我在復合ID中缺少標簽。

復合ID現在看起來像

<composite-id> 
  <key-many-to-one name="User" column="USER_ID" lazy="proxy" class="User" /> 
  <key-property name="Password" column="OLD_PASSWORD" /> 
  <key-property name="CreateDtm" column="CREATE_DATE" /> 
</composite-id> 

此問題的另一部分是父級上的級聯模式。 我需要將級聯設置為“ add-delete-orphan”,以刪除從集合中刪除的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM