Last updated by
5 years ago
Page: GORM explicit mapping definitions, Version:0
Explicit mapping is only necessary where DB schema is not compliant with GORM conventions. It is used to override conventions.
Existing DB schema column names (not compliant with GORM naming conventions) and Hibernate type mapping definition
static propertyMappings = {
firstName(column:'name_first') // column name not compliant, Hibernate type ok
lastName(column:'name_last')
dob(type:'date') // column name ok, Hibernate type declared
creationDate(column:'create_dt', type:'timestamp') // both column name and Hibernate type specified
}Turn off versioning when not supported by existing DB schema
static versioning = false
id name/generation strategy definition for existing DB schema
static id = { idMapping(name:'personId',column:'uid',unsavedValue:0) generator(class:'sequence',name:'person_seq') } orstatic id = { idMapping(name:'personId',column:'uid',unsavedValue:0) generator(class:'hilo',table:'hi_value',column:'next',maxLo:100) } orstatic id = { idMapping(name:'personId',column:'uid',unsavedValue:0) generator(class:'identity') }
Database index definitions
We need a way withing GORM and other possible ORMs to define the indexes to be created on the database, to aid in performance optimisation.Requirements:- Allow performance tuning for queries (unlikely to affect normal object graph mechanisms, may negatively impact performance of updates if indexes defined - but should be good for HQL/Criteria queries and depending on DB, optimising projections i.e. order by?)
- Support creation of indexes on any column of a domain class
- Support creation of indexes on any combination of columns of a domain class
Option 1
Indexes have names and can span properties (columns) so this option uses a new "indexes" static property closure on domain classes rather than the existing constraints mechanism:class Book {
String title
Author author
String ISBN
Date publishedDate static constraints = {
ISBN(blank:false)
title(size:1..100)
} static indexes = {
isbn('ISBN') // single column ISBN index
authorTitle('author', 'title') // two-column index
publishedDate() // Implicit publishedDate index, no need to specify name again
}
}static indexes = {
isbn 'ISBN' // single column ISBN index
authorTitle 'author', 'title' // two-column index
publishedDate() // Implicit publishedDate index, no need to specify name again
}
}Group all mapping related properties
static mapping = { withTable 'great_legacy_table_name' versioning false propertyMappings { firstName(column:'name_first') lastName(column:'name_last') dob(type:'date') creationDate(column:'create_dt', type:'date') } id { idMapping(name:'personId',column:'uid',unsavedValue:0) generator(class:'sequence',name:'person_seq') } indexes { isbn 'ISBN' authorTitle 'author', 'title' publishedDate() } }