2014-03-04 5 views
1

NHibernate에서 초보자 인 것을 용서해주십시오. hbm.xml에서 다음과 같은 몇 가지 예제를 발견했습니다.판별 기호는 무엇을 위해 사용됩니까?

<?xml version="1.0" encoding="utf-8" ?> 
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="test" > 

     <class name="test.FieldSetMapping" table="fieldsetmapping" discriminator-value="2352" lazy="false"> 
     <id name="Id" column="fieldsetmapping_id" type="Int64"> 
      <generator class="test.NHibernate.IdGenerator, test"> 
       <param name="table">nextinstanceid</param> 
       <param name="column">next</param> 
       <param name="max_lo">9</param> 
      </generator> 
     </id> 
     <discriminator column="mapping_type" type="Int32" /> 
     <version name="LastUpdateNumber" column="last_update_number" type="Int32" unsaved-value="-1"/> 
     <property name="OwnerName" column= "owner_name" type="String"/> 
     <component name="FieldSetDefinitionId" class="test.ObjectId"> 
      <property name="InstanceId" column= "fieldsetdefinition_id" type="Int64"/> 
     </component>  
     <property name="OwnerTypeClassId" column= "owner_type" /> 
     <bag name="FieldMappings" cascade="all-delete-orphan" generic="true" lazy="false"> 
      <key column="fieldsetmapping_id" not-null="true" /> 
      <one-to-many class="test.FieldSet.FieldMapping, test" /> 
     </bag> 
     <property name="MappingHandlerClass" column="handler_class" /> 
     </class> 
     <subclass name="test.EntityFieldSetMapping, test" discriminator-value="2353" extends="test.FieldSetMapping, test" lazy="false" > 
     <property name="TargetEntityType" type="test.Internal.NHibernate.ClassIdType, test" not-null="false"> 
      <column name="target_entity_type"/> 
     </property> 
     </subclass> 
     <class ...> 
     ... 
     </class> 
     <class ...> 
     ... 
     </class> 
    </hibernate-mapping> 

그러나 나는 판별 자의 의미를 알지 못합니다. Nhibernate Doc 5.1.6을 확인합니다.

The <discriminator> element is required for polymorphic persistence 
using the table-per-class-hierarchy mapping strategy and declares a discriminator 
column of the table. The discriminator column contains marker values that tell 
the persistence layer what subclass to instantiate for a particular row.A restricted 
set of types may be used: String, Char, Int32, Byte, Short, Boolean, YesNo, TrueFalse. 

그것은 뜻 경우 NH 테이블 fieldsetmapping의 행의 서브 클래스 test.EntityFieldSetMapping를 초기화합니다> 2352 mapping_type? 감사.

답변

3

NHibernate는 discriminator를 사용하여 다형성 시나리오에서 인스턴스화해야하는 클래스를 감지합니다. mapping_type = 2,353, 그것은 임의의 다른 값이 예외를 생성한다 test.EntityFieldSetMapping

의 인스턴스를 생성 할 경우

  • 는 mapping_type = 2,352 경우 test.FieldSetMapping

  • 의 인스턴스를 생성 할 .

관련 문제