简体   繁体   中英

Nhibernate Table per class hierarchy

I tried to add <discriminator> :

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="X" namespace="X.y">
     <class name="RawAttachment" table="Metadata_Attachment">
        <id name="AttachmentId">
          <generator class="guid" />
        </id>
        <discriminator column="PAYMENT_TYPE" type="String"/> 
  <subclass
    name="Attachment"
    discriminator-value="Cash">
     <property name="LocationId"/>
   </subclass>

but got the following error:

The element 'class' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 'discriminator' in namespace 'urn:nhibernate-mapping-2.2'. List of possible elements expected: 'property, many-to-one, one-to-one, component, dynamic-component, properties, any, map, set, list, bag, idbag, array, primitive-array, join, subclass, joined-subclass, union-subclass, loader, sql-insert, sql-update, sql-delete, filter, resultset, query, sql-query' in namespace 'urn:nhibernate-mapping-2.2'.

why?

I have not enough information about your model and mappings but it seems to be wrong. You should define a mapping for each subclass, something like this :

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="X"
namespace="X">
<class name="RawAttachment">
<id name="AttachmentId">
<generator class="guid.comb" />
</id>
<discriminator column="PAYMENT_TYPE" />
<property name="Prop1" />
<property name="Prop2" not-null="true" />
</class>
</hibernate-mapping>

And the subclass of RawAttachment

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="X"
namespace="X">
<subclass name="RawAttachmentSub" extends="RawAttachment">
<property name="OtherProp"/>
<property name="OtherProp2"/>
</subclass>
</hibernate-mapping>

Let me know if it works.

found the answer: Move the tag to directly under the tag and before any tags.

https://forum.hibernate.org/viewtopic.php?p=2368742&sid=3af1d42a54dc239c8287f2bcec2d1412

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM