Grails also supports creating domain classes mapped with Hibernate's Java 5.0 Annotations support.

To create an annotated domain class, create a new class in src/java and use the annotations defined as part of the EJB 3.0 spec (for more info on this see the Hibernate Annotations Docs):

package com.books;
@Entity
public class Book {
    private Long id;
    private String title;
    private String description;
    private Date date;

@Id @GeneratedValue public Long getId() { return id; }

public void setId(Long id) { this.id = id; }

public String getTitle() { return title; }

public void setTitle(String title) { this.title = title; }

public String getDescription() { return description; }

public void setDescription(String description) { this.description = description; } }

Once that is done you need to register the class with the Hibernate sessionFactory, to do you need to add entries to the grails-app/conf/hibernate/hibernate.cfg.xml file as follows:

<!DOCTYPE hibernate-configuration SYSTEM
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <mapping package="com.books" />
        <mapping class="com.books.Book" />
    </session-factory>
</hibernate-configuration>

By default the hibernate.cfg.xml file is located in the grails-app/conf/hibernate directory. If you wish to change this you can do so by specifying an alternative location in grails-app/conf/DataSource.groovy:

hibernate {
	config.location = "file:/path/to/my/hibernate.cfg.xml"
}

Or even a list of locations:

hibernate {
	config.location = ["file:/path/to/one/hibernate.cfg.xml",
                      "file:/path/to/two/hibernate.cfg.xml"]
}

When Grails loads it will register the necessary dynamic methods with the class. To see what else you can do with a Hibernate domain class see the section on Scaffolding.