23.4.4. Content based discrimination

  1. <class name="Person"
  2. discriminator-value="P">
  3. <id name="id"
  4. column="person_id"
  5. unsaved-value="0">
  6. <generator class="native"/>
  7. </id>
  8. <discriminator
  9. type="character">
  10. <formula>
  11. case
  12. when title is not null then 'E'
  13. when salesperson is not null then 'C'
  14. else 'P'
  15. end
  16. </formula>
  17. </discriminator>
  18. <property name="name"
  19. not-null="true"
  20. length="80"/>
  21. <property name="sex"
  22. not-null="true"
  23. update="false"/>
  24. <component name="address">
  25. <property name="address"/>
  26. <property name="zip"/>
  27. <property name="country"/>
  28. </component>
  29. <subclass name="Employee"
  30. discriminator-value="E">
  31. <property name="title"
  32. length="20"/>
  33. <property name="salary"/>
  34. <many-to-one name="manager"/>
  35. </subclass>
  36. <subclass name="Customer"
  37. discriminator-value="C">
  38. <property name="comments"/>
  39. <many-to-one name="salesperson"/>
  40. </subclass>
  41. </class>