joinTable
Purpose
Customizes the join table used for undirectional one-to-many, many-to-many and primitive collection types.Examples
Basic collection type:class Book {
static hasMany = [chapterPageCounts:Integer] static mapping = {
chapterPageCounts indexColumn:[name:"chapter_number", type:Integer],
joinTable:[column:"page_count"]}
Enum collection types:enum VehicleStatus { OFF, IDLING, ACCELERATING, DECELERATING }class Truck { static hasMany = [states:VehicleStatus] static mapping = {
states joinTable:[name:'VEHICLE_STATUS_LOG', key:'TRUCK_ID', column:'STATUS']
}
}
Many-to-many:class Book { String title
static belongsTo = Author
static hasMany = [authors:Author] static mapping = {
authors joinTable:[name:"mm_author_books", key:'mm_book_id' ]
}
}
class Author {
String name static hasMany = [books:Book] static mapping = {
books joinTable:[name:"mm_author_books", key:'mm_author_id']
}
}
Unidirectional One-to-many:class Employee {
static hasMany = [projects: Project]
static mapping = {
projects joinTable: [name: 'EMP_PROJ', column: 'PROJECT_ID', key: 'EMPLOYEE_ID']
}
}class Project { }
Description
Usage: association_name(joinTable:map)
Arguments:
name
- The table name
key
(optional) - The foreign key
column
(optional) - The inverse column
GORM has various strategies for mapping association types. Some of them, such as basic collection types and many-to-many associations, require the use of a join table. You can customize how this join table is created using the joinTable
argument.