Sets, Lists & Maps
Sets of objects
By default when you define a relationship with GORM it is a java.util.Set which is an unordered collection that cannot contain duplicates. In other words when you have:class Author {
static hasMany = [books:Book]
}The books property that GORM injects is a java.util.Set. The problem with this is there is no ordering when accessing the collection, which may not be what you want. To get custom ordering you can say that the set is a SortedSet:
class Author {
SortedSet books
static hasMany = [books:Book]
}In this case a java.util.SortedSet implementation is used which means you have to implement java.lang.Comparable in your Book class:
class Book implements Comparable { String title Date releaseDate = new Date() int compareTo(obj) { releaseDate.compareTo(obj.releaseDate) } }
Lists of objects (Since 0.5)
If you simply want to be able to keep objects in the order which they were added and to be able to reference them by index like an array you can define your collection type as a List:class Author {
List books
static hasMany = [books:Book]
}author.books[0] // get the first book
// This won't work! def book = new Book(title: 'The Shining') book.save() author.addToBooks(book)// Do it this way instead. def book = new Book(title: 'Misery') author.addToBooks(book) author.save()
Maps of objects (Since 0.5)
If you want a simple map of string/value pairs GORM can map this with the following:class Author {
Map books // my of ISBN:book names
}def a = new Author()
a.books = ["1590597583":"Grails Book"]
a.save()class Book {
Map authors
static hasMany = [authors:Author]
}def a = new Author(name:"Stephen King")def book = new Book()
book.authors = ["stephen":a]
book.save()

2 Comments
Post a Comment
Site Login