Where answers come from

Some pages can ask a language model questions. Set this up once; your choice is remembered in this browser for the whole site.

Model source
Use another source instead
You sign in on OpenRouter; it gives this page a key for your account.

Lessons learned...

Originally published .

A short list of things I have done wrong recently…

  • 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.

Explore the map · Browse by topic and date