nhibernate很多很多,查找不是id字段

时间:2011-03-01 22:33:43

标签: nhibernate nhibernate-mapping

我要简化我遇到的问题。所以我们假设我们有一个NHibernate的宠物领域,有斑点狗,蓬松猫,猎人猫,SSSS蛇这样在数据库中这些人看起来像:

ID  Name     Species
1   Spot     1
2   Fluffy   2
3   Hunter   2
4   SSSS     3

我们有一个物种表

ID Species
1  Dog
2  Cat
3  Snake

让我们说我们有一个包含这两个条目的皮肤类型表

ID  Type
1   Furry
2   Scaley

一个看起来像

的查找表
Species   Type
1         1
2         1
3         2

如何映射它以便用对象拉入皮肤类型。

我看过像这样的映射文件

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="menagerie"
assembly="menagerie">
<class name="Pet" table="Pets">
    <id name="Id">
      <column name="id" />
      <generator class="native" />
    </id>
    <property name="Name" />
    <many to one name="Species"
          class="PetSpecies"
          column="Species"
          cascade="all" />
    <bag name="SkinType" table="Species_SkinType" cascade="none" lazy="false">
      <key column="Species" />
      <many-to-many class="SkinType" column="[type]" />
    </bag>
</class>
</hibernate-mapping>

然而,应该填充宠物皮肤类型的包想要使用宠物的id作为查找键值,而不是宠物的物种。如何使用宠物的物种来填充宠物的皮肤类型?

3 个答案:

答案 0 :(得分:1)

我会将SkinType映射为Pet的多对一关系。在UI和验证中应使用将Species链接到SkinType的多对多表,以仅允许为Species选择有效的SkinType。我不会尝试在模型中强制执行此约束。

答案 1 :(得分:1)

foreign-key属性是否可以提供帮助?见this answer

答案 2 :(得分:1)

好吧,我明白了。

包不应该在Pet类上,而应在Species类上。

所以没有Fluffy.Skintype =毛茸茸,而是有Fluffy.Cat.Skintype =毛茸茸。