Mapping options for an Enum in a Grails Domain class
The next example illustrates the different options to map an enum.
Given the next code:
package demo
import groovy.transform.CompileStatic
@CompileStatic
class BootStrap {
def init = { servletContext ->
Book.saveAll(
new Book(name: 'Grails 3 - Step by Step',
status: Status.NOT_SET),
new Book(name: 'Grails 3 - A practical guide to application development',
status: Status.BORROWED),
new Book(name: 'Falando de Grails',
status: Status.SOLD),
)
}
def destroy = { }
}
package demo
import groovy.transform.CompileStatic
@CompileStatic
enum Status {
NOT_SET(-1),
BORROWED(0),
SOLD(1),
final int id
private Status(int id) { this.id = id }
}
For enumType ordinal
package demo
class Book {
String name
Status status
static mapping = {
status enumType: 'ordinal'
}
}
The enum will be mapped in the database as:
ID VERSION NAME STATUS 1 0 Grails 3 - Step by Step 0 2 0 Grails 3 - A practical guide to application development 1 3 0 Falando de Grails 2
For enumType identity
package demo
class Book {
String name
Status status
static mapping = {
status enumType: 'identity'
}
}
The enum will be mapped in the database as:
ID VERSION NAME STATUS
1 0 Grails 3 - Step by Step -1
2 0 Grails 3 - A practical guide to application development 0
3 0 Falando de Grails 1
For enumType string
package demo
class Book {
String name
Status status
static mapping = {
status enumType: 'string'
}
}
The enum will be mapped in the database as:
ID VERSION NAME STATUS 1 0 Grails 3 - Step by Step NOT_SET 2 0 Grails 3 - A practical guide to application development BORROWED 3 0 Falando de Grails SOLD
Tags: #grails