(Quick Reference)

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.