Warlock
Warlock

Reputation: 51

Grails Domain Class Inheritance: Configure Class Column

I use inheritance in Domain Classes in my Grails app. Obviously, inheritance adds a "class" column to my database. The content of the "class" column is the fully qualified name of the Domain Class, e.g. com.myapp.MyClass.

Now if I ever so some refactoring and the class name is no longer com.myapp.MyClass but e.g. com.myapp.mypackage.MyClass, then the database still contains the old class name which now no longer exists in the app.

Is there any way to configure the string that is put in the "class" column? Like another unique identifier for the class which is then mapped to the class name in my Grails config or something like this?

Upvotes: 3

Views: 1046

Answers (1)

Alidad
Alidad

Reputation: 5538

I think what you need is discriminator for the class.

By default when mapping inheritance Grails uses a single-table model where all classes share the same table. A discriminator column is used to determine the type for each row, by default the full class name. ref

You can map it like this:

class PodCast extends Content {
    …
    static mapping = {
        discriminator "audio"
    }
}

Look this documentation it gives you more options to customize it in more details

http://grails.org/doc/latest/ref/Database%20Mapping/discriminator.html

Upvotes: 3

Related Questions