(Quick Reference)

type

Purpose

Configures the Hibernate type for a particular property.

Examples

Changing to an unbounded text type (e.g. TEXT, LONGTEXT or CLOB depending on database dialect):

class Book {

    String title

    static mapping = {
        title type: "text"
    }
}

User types with multiple columns:

class Book {
    ...
    MonetaryAmount amount

    static mapping = {
        amount type: MonetaryUserType, {
            column name: "value"
            column name: "currency", sqlType: "char", length: 3
        }
    }
}

Description

Usage: association_name(type:string/class)

Hibernate will attempt to automatically select the appropriate database type from the field typed based on configuration in the Dialect class that is being used. But you can override the defaults if necessary. For example String values are mapped by default to varchar(255) columns. To store larger String values you can use a text type instead:

static mapping = {
    title type: "text"
}
type: "text" does not map to a literal SQL type named text. GORM asks Hibernate to resolve the dialect’s own unbounded large-character type, which is text on PostgreSQL and H2, longtext on MySQL and MariaDB, and CLOB on Oracle. Every Dialect shipped with Hibernate defines this mapping, so the resolved column is always unbounded regardless of which of these databases you use — you don’t need to (and can’t) choose the literal SQL type name yourself.

Hibernate also has the concept of custom UserType implementations. In this case you specify the UserType class. If the UserType maps to multiple columns you may need to specify a mapping for each column:

static mapping = {
    amount type: MonetaryUserType, {
        column name: "value"
        column name: "currency", sqlType: "char", length: 3
    }
}