2010-08-13 74 views
8

我有一个现有的角色类型包含数据的表。我试图用Table per class hierarchy NHibernate的这个表映射:将多个鉴别值映射到NHibernate中的单个默认类

<class name="IRoleType" table="RoleType"> 

    <id name="Id" column="RoleID"> 
    <generator class="native" /> 
    </id> 

    <discriminator column="RoleID" />  

    <property name="Description" column="Description" /> 
    <!-- ... more properties ... --> 

    <subclass name="RoleA" discriminator-value="1" /> 
    <subclass name="RoleB" discriminator-value="4" /> 
    <subclass name="RoleC" discriminator-value="7" /> 
</class> 

这里,IRoleType是一个接口,实现类RoleARoleBROLEC。这工作。但是,这里的问题 -

该表包含未映射到持久类的具有“额外”鉴别符值(2,3,5,6)的行。这些值在域中不推荐使用,因此对于为每个类创建持久化类无用。但是我们也不能从数据库中删除它们。

有没有办法将这些额外的行映射到一个“默认”类?如果不是,我还能如何解决这个问题?

谢谢!

回答

17

您可以通过将这些值映射到一个值来完成此操作。例如:

<discriminator 
    formula="case when RoleID in (2,3,5,6) then 0 else RoleId end" />  
<subclass name="RoleA" discriminator-value="1" /> 
<subclass name="RoleB" discriminator-value="4" /> 
<subclass name="RoleC" discriminator-value="7" /> 
<subclass name="DefaultRole" discriminator-value="0" /> 
相关问题