discriminator
Purpose
Customizes the discriminator value used in table-per-subclass inheritance mapping.Examples
class Content {
…
}
class PodCast extends Content {
…
static mapping = {
discriminator "audio"
}
}
Description
Usage: discriminator(string/map)
Arguments:
column
(optional) - The column name to store the discriminator
value
- The value to use for the discriminator
formula
(optional) - an SQL expression that is executed to evaluate the type of class. Use this or column
but not both
type
(optional defaults to string) - the Hibernate type, used for the where clause condition to know if it needs to wrap it with ' or not
By default when mapping inheritance Grails uses a single-table model so that all subclasses share the same table. A discriminator column is then used to help Grails tell what type a particular row is. By default the class name is stored as the value of this column. You can use the discriminator
method to customize the value stored:class Content {
…
}
class PodCast extends Content {
…
static mapping = {
discriminator "audio"
}
}
You can also customize the discriminator column name:class Content {
…
static mapping = {
discriminator column:"content_type"
}
}
class PodCast extends Content {
…
static mapping = {
discriminator value: "audio"
}
}
Or you can use a formula:class Content {
…
static mapping = {
discriminator value: "1", formula="case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end", type="integer"
}
}
class PodCast extends Content{
…
static mapping = {
discriminator value: "0"
}
}