What are some general guidelines on when to set fetchMode to \"eager\" in a domain class? Pros and cons of fetchMode \"eager\" vs. the default \"lazy\"?
Please inclu
Basically lazy loading has more benefits than the eager alternative (performance, use of resources) . Since it's the default grails setting for all relations (since Grails 1.1) you should generally not configure it for eager fetching, unless you experience certain issues. Such as:
Eager fetching can be quite dangerous when dealing with huge databases. Imagine a Domain class like this:
// really bad example
class TreeNode {
String name
TreeNode parent
static hasMany = [ childNodes: TreeNode ]
static mapping {
parent lazy: false
childNodes lazy: false
}
}
when you read any of the TreeNode instances, it will automatically pull all other instances of the domain class from the database into your memory. When there are enough instances, you'll probably kill you application by fetching only 1 instance.