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, character, integer, byte, short, boolean, yes_no, true_false.
<discriminator
column="discriminator_column"
type="discriminator_type"
force="true|false"
insert="true|false"
formula="arbitrary sql expression"
/>
column (optional - defaults to class) the name of the discriminator column.
type (optional - defaults to string) a name that indicates the Hibernate type
force (optional - defaults to false) "force" Hibernate to specify allowed discriminator values even when retrieving all instances of the root class.
insert (optional - defaults to true) set this to false if your discriminator column is also part of a mapped composite identifier. (Tells Hibernate to not include the column in SQL INSERT s.)
formula (optional) an arbitrary SQL expression that is executed when a type has to be evaluated. Allows content-based discrimination.
Actual values of the discriminator column are specified by the discriminator-value attribute of the <class> and <subclass> elements.
The force attribute is (only) useful if the table contains rows with "extra" discriminator values that are not mapped to a persistent class. This will not usually be the case.
Using the formula attribute you can declare an arbitrary SQL expression that will be used to evaluate the type of a row:
<discriminator
formula="case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end"
type="integer"/>