我还不熟悉NHibernate,但我试图理解它(边做边学)。 我将简要介绍一下我的表格布局和XML映射,希望你能帮我解决这个问题。
表'设备':
id int(11)
account_id int(11)
class tinyint(4)
slot1 int(11)
slot2 int(11)
slot3 int(11)
slot4 int(11)
slot5 int(11)
slot6 int(11)
slot7 int(11)
slot8 int(11)
表'项目':
id int(11)
account_id int(11)
code varchar(4)
purchase int(11)
duration bigint(20)
在类中,Slot1-8(设备)是DS.Item(这是items-table的类)。 因此,如果我有一个id为1512的项目作为示例,并且此ID在Equipment表中是slot3,我希望在类中看到DS.Item。请注意,项目可以同时在多个插槽上使用。如果Slot的ID为-1,则此Slot应为空(NULL)。在0上它应该是默认值(手动处理,而不是数据库对象)。
班级(BattleClass)具有特殊意义。这是关于一个有5个班级的游戏。例如,我可以在1类插槽3和4,3类插槽5和7中使用相同的项目,......
所以这是我的映射:
<class name="Parity.DS.Equipment,Parity.DS" table="equipment" lazy="false">
<id name="Id" column="id" generator="identity" />
<one-to-one name="Slot1" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
<one-to-one name="Slot2" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
<one-to-one name="Slot3" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
<one-to-one name="Slot4" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
<one-to-one name="Slot5" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
<one-to-one name="Slot6" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
<one-to-one name="Slot7" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
<one-to-one name="Slot8" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
<property name="BattleClass" column="class" />
<many-to-one name="Owner" unique="true" class="Parity.DS.Account" insert="false" update="false">
<column name="account_id" unique="true" />
</many-to-one>
</class>
<class name="Parity.DS.Item,Parity.DS" table="items" lazy="false">
<id name="Id" column="id" generator="identity" />
<property name="OwnerId" column="account_id" />
<many-to-one name="Owner" unique="true" class="Parity.DS.Account" insert="false" update="false">
<column name="account_id" unique="true" />
</many-to-one>
<property name="Code" column="code" />
<property name="BoughtAt" column="purchase" />
<property name="Duration" column="duration" />
</class>
我真的希望你能理解我想要做的事情。如果有任何问题,请随时询问:)
我发现了问题
<set name="Equipment" lazy="true" fetch="select">
<key column="account_id" unique="true" />
<!-- foreign-key="" -->
<one-to-many class="Parity.DS.Equipment" />
</set>
一对多的课程以前是Parity.DS.Item!很长一段时间没有注意到......地狱呀现在就知道了!