## 5.3.1 Saving and Updating

An example of using the save method can be seen below:

    def p = Person.get(1)
    p.save()

A major difference with Hibernate is when you call save it does not necessarily perform any SQL operations at that point. Hibernate typically batches up SQL statements and executes them at the end. This is typically done for you automatically by Grails, which manages your Hibernate session.

There are occasions, however, when you may want to control when those statements are executed or, in Hibernate terminology, when the session is "flushed". To do so you can use the flush argument to the save method:

    def p = Person.get(1)
    p.save(flush:true)

Note that in this case all pending SQL statements including previous saves will be synchronized with the db. This also allows you to catch any exceptions thrown, which is typically useful in highly concurrent scenarios involving optimistic locking:

    def p = Person.get(1)
    try {
        p.save(flush:true)
    }
    catch(Exception e) {
        // deal with exception
    }

You can find out more about the subtleties of saving data in this article - a must read!