2012-03-12 4 views
1

プロパティのグループをnhibernateの-elementとマッピングするときに問題に直面しています。NHibernate <properties>

<class name="PlannedSalesInYear" 
    table="tblPlannedSalesInYear" 
    lazy="false" > 
    <id name="_businessId" 
    column="BusinessId" 
    access="field"> 
     <generator class="assigned" /> 
    </id> 

<properties name="UIDX_PSPerVehicleAndYear"  
      optimistic-lock="true" 
      insert="true" 
      update="true" 
      unique="true"> 
    <property name="_year" 
      access="field" 
      column="Year"/> 
    <many-to-one name="_vehicle" 
       access="field" 
       fetch="select" 
       column="VehicleId" 
       foreign-key="FK_VehicleOfPlannedSalesInYear"/>  
</properties> 

<property name="_plannedSales" 
      not-null="false" 
      access="field" 
      column="PlannedSales"/> 

それは作品を保存するが、車両プロパティをロードするときにnullされているようだとのマッピングを変更し、それが動作-Tagを避けるときに年プロパティが0

です。残念ながら、この場合ユニークなインデックスはexpeceted(Sqlite)として動作しません。

変更マッピング:

<class name="PlannedSalesInYear" 
    table="tblPlannedSalesInYear" 
    lazy="false" > 
    <id name="_businessId" 
    column="BusinessId" 
    access="field"> 
    <generator class="assigned" /> 
    </id> 

<property name="_plannedSales" 
      not-null="false" 
      access="field" 
      column="PlannedSales" 
      /> 

<property name="_year" 
      access="field" 
      unique-key="UIDX_PSPerVehicleAndYear" 
      column="Year"/> 
<many-to-one name="_vehicle" 
      access="field" 
      fetch="select" 
      column="VehicleId" 
      unique-key="UIDX_PSPerVehicleAndYear" 
      foreign-key="FK_VehicleOfPlannedSalesInYear"/> 

誰かがロードが動作しない理由を任意のアイデアを持っていますか?または、ユニークなインデックスを作成するのがなぜ2番目のマッピングでバグか?

答えて

2

私はあなたと同じ問題を抱えていました。ユニークキーの使用例を見つけて解決策を見つけることができました。

hbmファイルでプロパティを定義するときにも、列の定義を追加します。

<property name="Year"> 
    <column name=Year sql-type="int" not-null="true" unique-key="UC_MY" /> 
</property> 
<property name="Month"> 
    <column name=Month sql-type="tinyint" not-null="true" unique-key="UC_MY" /> 
</property> 

少なくともあなたは2つの単純な性質を持っているときに動作しますが、私はそれがあまりにも多対一の特性で動作するかどうかをチェックしてみてくださいその価値を推測すること。