- Working in GORM/Hibernate if you provide a mapping DSL and intend on your class to move between databases do not assume the default "hilo" algorithm will work on all databases. See id generator documentation at hibernate.org
- Do not assume that you can throw classes up and down an inheritance hierarchy in Hibernate. For example:
class Person {
Long id
String name
}
class Parent extends Person {
static hasMany = ['kids':Person]
}
... you need to do this to turn a "person" into a "parent"
def makeParent = {
Person.executeUpdate( "update versioned Person as p set p.class =:clazz where p.id =:id", [clazz:Parent.class.getName(),id:params.id.toLong()] )
def parent = Parent.get(params.id)
if(!parent) {
flash.message = "Person not found with id ${params.id}"
redirect(action:list)
}
else {
redirect(controller:'parent',action:show,id:parent.id)
}
}
... other techniques to do this create a new object with a new id. That means you can't model a "parent" to "child" relationship this way. Instead turn the relationship around ...
class Person {
Long id
String name
static hasMany = ['parents':Person]
}
... or create a bridge object...
class Person {
Long id
String name
}
class Relationship {
Person parent
Person child
}
... and that works much better. - Do not lock in a domain model based on "big design first" principles. Domain may have to change to fit reality of your system. Sometimes you don't really understand the problem on day 1 or day 10.
- Do not release big, release small, release frequently. It's better to get tiny releases and adjust course in small increments rather than have "big bang" releases.
- Coding and posting while tired only lead to messes you have to clean up later.
- Do not ignore your email.
Hopefully, the insanity has passed.